首页 > 编程语言 >optical strain(python)

optical strain(python)

时间:2024-01-05 18:11:34浏览次数:41  
标签:return python flow self cv2 strain optical np def

利用python opencv计算optical strain

import cv2
import numpy as np

class OptFlowStrain:
    def __init__(self):
        self.TVL1 = cv2.optflow.DualTVL1OpticalFlow_create()

    def run(self, img0, img1):
        return self.cal_opt_flow(img0, img1)

    def get_opt_res(self):
        return

    def get_translation_matrix(self, nx, ny):
        M = np.float32([[1, 0, nx], [0, 1, ny]])
        return M

    def translation(self, src, nx, ny):
        h, w = src.shape
        # print('h: {}, w: {}'.format(h,w))
        M = self.get_translation_matrix(nx, ny)
        dst = cv2.warpAffine(src, M, (w,h))
        return dst

    def split_opt_flow(self, flow):
        xy0, xy1 = flow[:, :, 0], flow[:, :, 1]
        # cv2.cartToPolar()
        mag, ang = cv2.cartToPolar(xy0, xy1)#, angleInDegrees=True
        u, v = cv2.polarToCart(mag, ang)

        px = self.translation(u, -1, 0)
        py = self.translation(u, 0, 0-1)
        ux = u-px
        uy = u-py

        qx = self.translation(v,-1,0)
        qy = self.translation(v,0,-1)
        vx = v-qx
        vy = v-qy

        temp = cv2.add(uy, vx)
        os = np.multiply(ux, ux) + np.multiply(vy, vy) + 0.5*np.multiply(temp, temp)
        return u, v, cv2.sqrt(os)

    def cv32fc1_to_cv_8uc1(self, source):
        assert source.dtype == np.float32
        source.astype(np.uint8)
        source *= 255
        return source

    def cal_opt_flow(self, img0, img1):
        assert img0.dtype == np.uint8
        assert img1.dtype == np.uint8
        assert img0.shape == img1.shape

        flow = self.TVL1.calc(img0, img1, None)

        u,v,s = self.split_opt_flow(flow)

        u = self.cv32fc1_to_cv_8uc1(u)
        v = self.cv32fc1_to_cv_8uc1(v)
        s = self.cv32fc1_to_cv_8uc1(s)

        # cv2.imwrite('u.jpg', u)
        # cv2.imwrite('v.jpg', v)
        # cv2.imwrite('s.jpg', s)

        return u, v, s

标签:return,python,flow,self,cv2,strain,optical,np,def
From: https://www.cnblogs.com/crazyMint/p/17947800

相关文章

  • 在Python程序中读取和写入文件的方法
    在Python编程中,读取和写入文件是常见的操作。本文将介绍几种常用的方法来实现在Python程序中读取和写入文件。1.使用open()函数Python提供了内置的open()函数,可以用于打开一个文件,并返回一个文件对象,从而进行文件的读取和写入操作。open()函数接受两个参数:文件名和打开模式。示例代......
  • 使用Python爬取大麦网演出商品评论的方法
    在网络时代,用户对于商品的评论和评价是非常重要的参考依据。本文将介绍如何使用Python来爬取大麦网演出商品评论,以获取用户对演出的反馈和评价。1.确定目标页面首先,我们需要确定要爬取评论的目标页面。在大麦网上,每个演出商品都有一个唯一的商品ID,通过拼接URL可以访问到该商品的评......
  • Python中的"e"表示什么意思
    在Python编程语言中,"%e"是一种格式化字符串的方式,用于将浮点数按指数形式输出。本文将详细介绍"%e"的使用方法以及示例。1."%e"格式化字符串的语法在Python中,可以使用"%e"来定义一个格式化字符串,用于将浮点数按指数形式输出。其语法如下:```python"%e"%value```其中,`%e`表示将浮点......
  • Python中的"%s"表示什么意思
    在Python编程语言中,"%s"是一种格式化字符串的方式,用于将字符串按照指定格式输出。本文将详细介绍"%s"的使用方法以及示例。1."%s"格式化字符串的语法在Python中,可以使用"%s"来定义一个格式化字符串,用于将字符串按照指定格式输出。其语法如下:```python"%s"%value```其中,`%s`表示将......
  • 【多进程】python多进程CPU密集型任务的进程数选择
    实验思路从1加到100000000,分别用单进程,多进程方案去做。实验代码frommultiprocessingimportPool,Process,Queueimportos,time,randomdeftest_func(left,right):res=0foriinrange(left,right):res+=ireturnresdefjoin(q):......
  • python学习----编程题02
    题目:企业发放的奖金根据利润提成。利润(0)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成540万60万之间时高于40万元的部分,可提成3%60万到100万之间时,高于60......
  • opencv库图像基础3直方图-python
    opencv库图像基础3直方图-python直方图是什么OpenCV中的直方图是图像中像素值分布情况的统计表示。它是图像空间域内像素值分布的图形表示,以便更好地理解颜色分布。灰度直方图是图像中每个像素灰度值出现的次数或频数的统计结果。它只反映该图像中灰度值出现的频率,而未反映某......
  • Python - 列表切片 与 深拷贝、浅拷贝
    1.列表list常用的方法:lst=[1,2,3]#append(new_item)方法相当于在列表末尾追加一个元素,相当于lst[len:]=new_itemlst.append(4)print(lst)#extend(iterable)方法,将iterable中的每个元素逐个添加到列表中,#相当于lst[len:len+len(iterable)]=iterablelst.e......
  • Python+Requests+PyTest+Excel+Allure 接口自动化测试实战
    本文主要介绍了Python+Requess+PyTest+Excel+Allure接口自动化测试实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧Unittest是Python标准库中自带的单元测试框架,Unittest有时候也被称为PyUnit,就像JUnit......
  • Python爬虫JS解密-baidu翻译
    请求分析参数构造流程这种提交数据得到响应的的请求,往往参数比较麻烦,所以参数的构造是得到完整请求的关键.首先我们要明确目标,爬取这个网站的目的是什么,那我们的目的就是模拟浏览器发送请求,完成翻译的功能,明确了目标之后我们再定位到相关的URL就比较容易了。现在先打开chrome的调......