光流及实现相关

OpenCV的运动估计算法(cv2.calcOpticalFlowFarneback) 通常, 应将高斯窗口的winsize 设置为更大的值,以实现相同级别的鲁棒性。poly_sigma:与poly_n有对应关系,高斯的标准差,用于平滑用作多项式展开基础的导数。较大的值意味着图像将具有更平滑的表面,从而产生更强大的算法和更模糊的运动场。pyr_scale :指定图像比例 (<1) 的参数,以便为每个图像构建金字塔。较大的值会增加算法对图像噪声的鲁棒性,并可以检测更快速的运动,但会产生更模糊的运动场。flow:与prevImg大小相同,且类型 为CV_32FC2的计算流图像。 阅读详情

原文地址:https://blog.youkuaiyun.com/zouxy09/article/details/8683859

光流(optic flow)是什么呢?名字很专业,感觉很陌生,但本质上,我们是最熟悉不过的了。因为这种视觉现象我们每天都在经历。从本质上说,光流就是你在这个运动着的世界里感觉到的明显的视觉运动(呵呵,相对论,没有绝对的静止,也没有绝对的运动)。例如,当你坐在火车上,然后往窗外看。你可以看到树、地面、建筑等等,他们都在往后退。这个运动就是光流。而且,我们都会发现,他们的运动速度居然不一样?这就给我们提供了一个挺有意思的信息:通过不同目标的运动速度判断它们与我们的距离。一些比较远的目标,例如云、山,它们移动很慢,感觉就像静止一样。但一些离得比较近的物体,例如建筑和树,就比较快的往后退,然后离我们的距离越近,它们往后退的速度越快。一些非常近的物体,例如路面的标记啊,草地啊等等,快到好像在我们耳旁发出嗖嗖的声音。      

光流除了提供远近外,还可以提供角度信息。与咱们的眼睛正对着的方向成90度方向运动的物体速度要比其他角度的快,当小到0度的时候,也就是物体朝着我们的方向直接撞过来,我们就是感受不到它的运动(光流)了,看起来好像是静止的。当它离我们越近,就越来越大(当然了,我们平时看到感觉还是有速度的,因为物体较大,它的边缘还是和我们人眼具有大于0的角度的)。      

光流的概念是Gibson在1950年首先提出来的。它是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。一般而言,光流是由于场景中前景目标本身的移动、相机的运动,或者两者的共同运动所产生的。      

当人的眼睛观察运动物体时,物体的景象在人眼的视网膜上形成一系列连续变化的图像,这一系列连续变化的信息不断“流过”视网膜(即图像平面),好像一种光的“流”,故称之为光流(optical flow)。光流表达了图像的变化,由于它包含了目标运动的信息,因此可被观察者用来确定目标的运动情况。      

研究光流场的目的就是为了从图片序列中近似得到不能直接得到的运动场。运动场,其实就是物体在三维真实世界中的运动;光流场,是运动场在二维图像平面上(人的眼睛或者摄像头)的投影。      

那通俗的讲就是通过一个图片序列,把每张图像中每个像素的运动速度和运动方向找出来就是光流场。那怎么找呢?咱们直观理解肯定是:第t帧的时候A点的位置是(x1, y1),那么我们在第t+1帧的时候再找到A点,假如它的位置是(x2,y2),那么我们就可以确定A点的运动了:(ux, vy) = (x2, y2) - (x1,y1)。        

那怎么知道第t+1帧的时候A点的位置呢? 这就存在很多的光流计算方法了。      

1981年,Horn和Schunck创造性地将二维速度场与灰度相联系,引入光流约束方程,得到光流计算的基本算法。人们基于不同的理论基础提出各种光流计算方法,算法性能各有不同。Barron等人对多种光流计算技术进行了总结,按照理论基础与数学方法的区别把它们分成四种:基于梯度的方法、基于匹配的方法、基于能量的方法、基于相位的方法。近年来神经动力学方法也颇受学者重视。        

其他的咱们先不说了,回归应用吧(呵呵,太高深了,自己说不下去了)。OpenCV中实现了不少的光流算法。

1)calcOpticalFlowPyrLK通过金字塔Lucas-Kanade 光流方法计算某些点集的光流(稀疏光流)。理解的话,可以参考这篇论文:”Pyramidal Implementation of the Lucas Kanade Feature TrackerDescription of the algorithm”

2)calcOpticalFlowFarneback用Gunnar Farneback 的算法计算稠密光流(即图像上所有像素点的光流都计算出来)。它的相关论文是:"Two-Frame Motion Estimation Based on PolynomialExpansion"

3)CalcOpticalFlowBM通过块匹配的方法来计算光流。

4)CalcOpticalFlowHS用Horn-Schunck 的算法计算稠密光流。相关论文好像是这篇:”Determining Optical Flow”

5)calcOpticalFlowSF这一个是2012年欧洲视觉会议的一篇文章的实现:"SimpleFlow: A Non-iterative, Sublinear Optical FlowAlgorithm",工程网站是:http://graphics.berkeley.edu/papers/Tao-SAN-2012-05/  在OpenCV新版本中有引入。      

稠密光流需要使用某种插值方法在比较容易跟踪的像素之间进行插值以解决那些运动不明确的像素,所以它的计算开销是相当大的。而对于稀疏光流来说,在他计算时需要在被跟踪之前指定一组点(容易跟踪的点,例如角点),因此在使用LK方法之前我们需要配合使用cvGoodFeatureToTrack()来寻找角点,然后利用金字塔LK光流算法,对运动进行跟踪。但个人感觉,对于少纹理的目标,例如人手,LK稀疏光流就比较容易跟丢。      

至于他们的API的使用说明,我们直接参考OpenCV的官方手册就行:http://www.opencv.org.cn/opencvdoc/2.3.2/html/modules/video/doc/motion_analysis_and_object_tracking.html#calcopticalflowfarneback      

 IJCV2011有一篇文章,《A Database and Evaluation Methodology for Optical Flow》里面对主流的光流算法做了简要的介绍和对不同算法进行了评估。网址是:http://vision.middlebury.edu/flow/      

感觉这个文章在光流算法的解说上非常好,条例很清晰。想了解光流的,推荐看这篇文章。另外,需要提到的一个问题是,光流场是图片中每个像素都有一个x方向和y方向的位移,所以在上面那些光流计算结束后得到的光流flow是个和原来图像大小相等的双通道图像。那怎么可视化呢?这篇文章用的是Munsell颜色系统来显示。      

关于孟塞尔颜色系统(MunsellColor System),可以看wikibaike。它是美国艺术家阿尔伯特孟塞尔(Albert H. Munsell,1858-1918)在1898年创制的颜色描述系统。
 

孟塞尔颜色系统的空间大致成一个圆柱形:南北轴=明度(value),从全黑(1)到全白(10)。经度=色相(hue)。把一周均分成五种主色调和五种中间色:红(R)、红黄(YR)、黄(Y)、黄绿(GY)、绿(G)、绿蓝(BG)、蓝(B)、蓝紫(PB)、紫(P)、紫红(RP)。相邻的两个位置之间再均分10份,共100份。距轴的距离=色度(chroma),表示色调的纯度。其数值从中间(0)向外随着色调的纯度增加,没有理论上的上限(普通的颜色实际上限为10左右,反光、荧光等材料可高达30)。由于人眼对各种颜色的的敏感度不同,色度不一定与每个色调和明度组合相匹配。具体颜色的标识形式为:色相+明度+色度。     

在上面的那个评估的网站有这个从flow到color显示的Matlab和C++代码。但是感觉C++代码分几个文件,有点乱,然后我自己整理成两个函数了,并配合OpenCV的Mat格式。      

下面的代码是用calcOpticalFlowFarneback来计算稠密光流并且用这个颜色系统来显示的。这个计算稠密光流的方法与其他几个相比还是比较快的,640x480的视频我的是200ms左右一帧,但其他的一般都需要一两秒以上。结果图中,不同颜色表示不同的运动方向,深浅就表示运动的快慢了。void calcOpticalFlowFarneback(InputArray prevImg, InputArray nextImg,InputOutputArray flow, double pyrScale, int levels, int winsize, intiterations, int polyN, double polySigma, int flags)大部分参数在论文中都有一套比较好的值的,直接采用他们的就好了。


// Farneback dense optical flow calculate and show in Munsell system of colors

// Author : Zouxy

// Date   : 2013-3-15

// HomePage : http://blog.youkuaiyun.com/zouxy09

// Email  : zouxy09@qq.com

 

// API calcOpticalFlowFarneback() comes from OpenCV, and this

// 2D dense optical flow algorithm from the following paper:

// Gunnar Farneback. "Two-Frame Motion Estimation Based on Polynomial Expansion".

// And the OpenCV source code locate in ..\opencv2.4.3\modules\video\src\optflowgf.cpp

 

#include <iostream>

#include "opencv2/opencv.hpp"

 

using namespace cv;

using namespace std;

 

#define UNKNOWN_FLOW_THRESH 1e9

 

// Color encoding of flow vectors from:

// http://members.shaw.ca/quadibloc/other/colint.htm

// This code is modified from:

// http://vision.middlebury.edu/flow/data/

void makecolorwheel(vector<Scalar> &colorwheel)

{

    int RY = 15;

    int YG = 6;

    int GC = 4;

    int CB = 11;

    int BM = 13;

    int MR = 6;

 

    int i;

 

	for (i = 0; i < RY; i++) colorwheel.push_back(Scalar(255,	   255*i/RY,	 0));

    for (i = 0; i < YG; i++) colorwheel.push_back(Scalar(255-255*i/YG, 255,		 0));

    for (i = 0; i < GC; i++) colorwheel.push_back(Scalar(0,		   255,		 255*i/GC));

    for (i = 0; i < CB; i++) colorwheel.push_back(Scalar(0,		   255-255*i/CB, 255));

    for (i = 0; i < BM; i++) colorwheel.push_back(Scalar(255*i/BM,	   0,		 255));

    for (i = 0; i < MR; i++) colorwheel.push_back(Scalar(255,	   0,		 255-255*i/MR));

}

 

void motionToColor(Mat flow, Mat &color)

{

	if (color.empty())

		color.create(flow.rows, flow.cols, CV_8UC3);

 

	static vector<Scalar> colorwheel; //Scalar r,g,b

	if (colorwheel.empty())

		makecolorwheel(colorwheel);

 

	// determine motion range:

    float maxrad = -1;

 

	// Find max flow to normalize fx and fy

	for (int i= 0; i < flow.rows; ++i) 

	{

		for (int j = 0; j < flow.cols; ++j) 

		{

			Vec2f flow_at_point = flow.at<Vec2f>(i, j);

			float fx = flow_at_point[0];

			float fy = flow_at_point[1];

			if ((fabs(fx) >  UNKNOWN_FLOW_THRESH) || (fabs(fy) >  UNKNOWN_FLOW_THRESH))

				continue;

			float rad = sqrt(fx * fx + fy * fy);

			maxrad = maxrad > rad ? maxrad : rad;

		}

	}

 

	for (int i= 0; i < flow.rows; ++i) 

	{

		for (int j = 0; j < flow.cols; ++j) 

		{

			uchar *data = color.data + color.step[0] * i + color.step[1] * j;

			Vec2f flow_at_point = flow.at<Vec2f>(i, j);

 

			float fx = flow_at_point[0] / maxrad;

			float fy = flow_at_point[1] / maxrad;

			if ((fabs(fx) >  UNKNOWN_FLOW_THRESH) || (fabs(fy) >  UNKNOWN_FLOW_THRESH))

			{

				data[0] = data[1] = data[2] = 0;

				continue;

			}

			float rad = sqrt(fx * fx + fy * fy);

 

			float angle = atan2(-fy, -fx) / CV_PI;

			float fk = (angle + 1.0) / 2.0 * (colorwheel.size()-1);

			int k0 = (int)fk;

			int k1 = (k0 + 1) % colorwheel.size();

			float f = fk - k0;

			//f = 0; // uncomment to see original color wheel

 

			for (int b = 0; b < 3; b++) 

			{

				float col0 = colorwheel[k0][b] / 255.0;

				float col1 = colorwheel[k1][b] / 255.0;

				float col = (1 - f) * col0 + f * col1;

				if (rad <= 1)

					col = 1 - rad * (1 - col); // increase saturation with radius

				else

					col *= .75; // out of range

				data[2 - b] = (int)(255.0 * col);

			}

		}

	}

}

 

int main(int, char**)

{

    VideoCapture cap;

	cap.open(0);

	//cap.open("test_02.wmv");

 

    if( !cap.isOpened() )

        return -1;

 

    Mat prevgray, gray, flow, cflow, frame;

    namedWindow("flow", 1);

 

	Mat motion2color;

 

    for(;;)

    {

		double t = (double)cvGetTickCount();

 

        cap >> frame;

        cvtColor(frame, gray, CV_BGR2GRAY);

		imshow("original", frame);

 

        if( prevgray.data )

        {

            calcOpticalFlowFarneback(prevgray, gray, flow, 0.5, 3, 15, 3, 5, 1.2, 0);

			motionToColor(flow, motion2color);

            imshow("flow", motion2color);

        }

        if(waitKey(10)>=0)

            break;

        std::swap(prevgray, gray);

 

		t = (double)cvGetTickCount() - t;

		cout << "cost time: " << t / ((double)cvGetTickFrequency()*1000.) << endl;

    }

    return 0;

}

 

这个是效果:

一个挥动的手:

 

虽然也有背景在动,但是因为他们的运动方向不一样,所以还是可以辨认出来前面那个是手,在前景和背景运动不统一的时候,还是可以辨认出来的。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

别再为OpenCV光流参数头疼了!手把手教你用calcOpticalFlowFarneback搞定图像对齐(附完整代码) 本文详细解析了OpenCV中calcOpticalFlowFarneback光流算法的参数调优技巧,帮助开发者精准实现图像对齐。通过深入讲解pyr_scale、winsize等关键参数的作用及实战调参策略,并附完整代码示例,解决光流计算中的常见问题,提升图像处理效率。 阅读详情

相关推荐

【OpenCV函数详解之cv2.calcOpticalFlowPyrLK(old_gray, frame_gray, p0, None, **lk_params)】

cv2.calcOpticalFlowPyrLK() 是 OpenCV 库中用于计算两幅图像之间稀疏光流(Sparse Optical Flow)的方法之一。光流是指图像中物体在不同时间点的位置移动。这个函数通过 Lucas-Kanade 方法来跟踪图像中的关键点(feature points)在后续帧中的位置。需要传入前一帧和当前图像以及前一帧检测到的角点,用于获得光流检测后的角点位置。

2301_77444219的博客 3613

光流Optical Flow介绍与OpenCV实现

**光流(Optical Flow)**是什么呢?名字很专业,感觉很陌生,但本质上,我们是最熟悉不过的了。因为这种视觉现象我们每天都在经历。从本质上说,光流就是你在这个运动着的世界里感觉到的明显的视觉运动(呵呵,相对论,没有绝对的静止,也没有绝对的运动)。例如,当你坐在火车上,然后往窗外看。你可以看到树、地面、建筑等等,他们都在往后退。这个运动就是光流。而且,我们都会发现,他们的运动速度居然不一样?

点滴积累 1726

单目标跟踪 多目标跟踪 目标跟踪 运动估计/光流 OPENCV光流源码分析 基于卷积神经网络的光流预测算法 相关滤波方法

目标跟踪算法是指通过视频分析技术,实时追踪视频序列中的目标并获取其位置、形状、速度等信息的一种算法。目标跟踪在多个领域有着广泛的应用,如监控安防、无人驾驶、人机交互以及虚拟现实等。然而,目标跟踪算法仍面临一些挑战,如实时性、鲁棒性和准确性等方面的问题。研究者们正在不断探索新的算法和技术,以提高目标跟踪的性能和适用性。 目标跟踪算法在多个领域都有广泛的应用前景,并随着技术的不断进步和发展,其性能和准确性将得到进一步提升。

万有文的博客 2317

OpenCV3学习(12.1) 稠密光流calcOpticalFlowFarneback

简介         光流(optic flow)是什么呢?名字很专业,感觉很陌生,但本质上,我们是最熟悉不过的了。因为这种视觉现象我们每天都在经历。从本质上说,光流就是你在这个运动着的世界里感觉到的明显的视觉运动(呵呵,相对论,没有绝对的静止,也没有绝对的运动)。例如,当你坐在火车上,然后往窗外看。你可以看到树、地面、建筑等等,他们都在往后退。这个运动就是光流。而且,我们都会发现,他们的运动速...

知识搬运工的博客 1万+

RAFT:使用深度学习的光流估计

在这篇文章中,我们将讨论两种基于深度学习的使用光流进行运动估计的方法。FlowNet是第一种用于计算光流的CNN方法,RAFT是目前最先进的估算光流的方法。我们还将看到如何使用作者提供的经过训练的模型来使用PyTorch对新数据进行推理。 (1)光流任务 在前一篇文章中,我们讨论了估算光流的基本组件和一些算法方法。让我们提醒您,光流任务包括估计两个连续帧之间的逐像素运动。我们的目标是找到稀疏特征集或所有图像像素的位移来计算它们的运动向量。在前一篇文章中,我们回顾了基于OpenCV的理论和实际解决方案,现在我

weixin_43229348的博客 1万+

光流跟踪算法及OpenCV源代码探索

本文主要记录看光流跟踪算法的感悟,以及OpenCV中对应的实现源码的整理 原文:Pyramidal Implementation of theLucas Kanade Feature Tracker Description of the algorithm 1 光流算法相关概念 特征跟踪的目的:对于第一张图像I上的位置u,在第二张图像J上找到一个位置v,使得I(u)和J(v)相近 点x处的光流:...

weixin_37709708的博客 1636

光流跟踪

一 简介 在视频序列中,物体帧间移动可表示为物体的运动速度 ,该运动速度即为光流。通过数学建模,光流可表示为图像空域差分(XY平面梯度)与图像帧间差分(相邻两帧图像差)的函数。理想情况下,我们可以计算出图像上每一个点的运动速度,但存在两点问题: 1)光滑平面上图像空域差分与图像帧间差分均为0,故计算出光流速度为0; 2)在图像边缘上,由于光流计算观察一个较小...

agm89261的博客 1174

背景建模光流估计

print("视频读取失败")# 每隔一定帧数重新检测特征点。# 按 'q' 键退出循环。# 读取第一帧,转换为灰度图。# 选择良好的光流点。# 特征点检测的参数。# 创建一个空的图像。

yzx991013的博客 923

《深度学习》OpenCV 光流估计 原理、案例解析

光流估计是指通过计算相邻帧之间的像素位移,来估计图像中物体的运动信息。

wx_AHao1004Y的博客 2779

光流 | 光流交流群

微信群二维码: 基于深度学习的稠密光流预测代码 Guided Optical Flow Learning代码 2017 Optical Flow 2018 Optical Flow 2019 Optical Flow 基于事件相机的光流 关于光流的硕博士论文 基本光流论文 光流论文代码(大牛) 变分光流算法 对偶光流算法 光流应用 微信群资源展示: ...

尘世冰封的专栏 819

opencv3/Python 稠密光流calcOpticalFlowFarneback详解

光流是由物体或相机的运动引起的图像对象在两个连续帧之间的视在运动模式.光流方法计算在t和 t+Δtt+Δt时刻拍摄的两个图像帧之间的每个像素的运动位置。这些方法被称为差分,因为它们基于图像信号的局部泰勒级数近似; 也就是说,它们使用关于空间和时间坐标的偏导数。 和稀疏光流相比,稠密光流不仅仅是选取图像中的某些特征点(一般用角点)进行计算;而是对图像进行逐点匹配,计算所有点的偏移量,得到光流场,从而进行配准.因此其计算量会显著大于稀疏光流,但效果一般优于稀疏光流. 函数: def calcOpticalFlowFarneback(prev, next, flow, pyr_scale, lev

使用RAFT的深度光流

光流是像素在图像序列中的表观运动。为了估计光流,场景中物体的运动必须具有相应的亮度位移。这意味着一张图像中移动的红球在下一张图像中应该具有相同的亮度和颜色,这使我们能够确定它在像素方面移动了多少。图 1 显示了一个光流示例,其中逆时针旋转的吊扇被一系列图像捕获。最右边的彩色图像包含了从第 1 帧到第 2 帧每个像素的明显运动轨迹,并进行了颜色编码,不同的颜色表示像素运动的不同水平和垂直方向。这就是密集光流估计的一个例子。密集光流估计为每个像素分配一个二维光流向量,描述其在时间间隔内的水平和垂直位移。

如果想成为中心,那么就到中心去吧。 1万+

ARM和FPGA之间的通信(硬件原理图篇)

设计该开发板的初衷是为了学习,但也希望今后能扩展其功能,看到大家都在diy示波器,自己也非常冲动的想DIY一把,于是呼选了arm+fpga的方案,fpga主要用来实现数据的高速采样,而ARM则提供数据的显示,以及一些人机交互的功能。那么该方案中最重要的地方就是ARM和FPGA之间的通信如何实现了。在网上查了很多的资料,有说将FPGA作为ARM的一个外设,可以通过DMA的方式来直接访问;也有说把FP

屌yy的博客 5万+

各种光流估计方法资源集合

各种光流估计方法资源集合 去发现同类优质开源项目:https://gitcode.com/ 简介 本仓库汇集了多种光流估计方法的详细资料,包括但不限于分层约束光流、大位移光流估计、深度匹配以及稀疏匹配光流估计等。这些方法代表了光流估计领域的最新研究成果,旨在为研究人员和开发者提供一套全面的技术资源和代码实现。 内容概述 分层约束光流 提供了分层约束光流的基本原理和算法流程。 包括对应的代码实现和...

gitblog_06796的博客 433

具身智能与空天具身智能:从理论到实践的跨领域融合

本文深入探讨了具身智能从理论到实践的发展,重点分析了空天具身智能这一前沿领域。文章阐述了如何为AI赋予“身体”,使其通过与环境实时交互进化智能,并详细拆解了构建空天智能体所需的核心技术模块,包括多模态感知、基于大模型的决策规划以及鲁棒控制。同时,结合山区电力线自主巡检等实战案例,展望了多智能体协同与标准化等未来方向。

weixin_29045585的博客 534

1G/2.5G Ethernet PCS/PMA or SGMII

SGMII即Serial GMII,串行GMII,收发各一对差分信号线,时钟频率625MHz,在时钟信号的上升沿和下降沿均采样,所以总的数据速率为1.25Gbps=625Mbps*2。参考时钟RX_CLK由PHY提供,是可选的,主要用于MAC侧没有时钟的情况,一般情况下,RX_CLK不使用。收发都可以从数据中恢复出时钟。在TXD发送的串行数据中,每8比特数据会插入TX_EN/TX_ER 两比特控制信息,同样,在RXD接收数据中,每8比特数据会插入RX_DV/RX_ER 两比特控制信息。

sqzjiayou的博客 1万+

opencv c++摄像头光流_OpenCV视频分析-光流分析

概述✔️ 光流是由对象或相机的移动引起的两个连续帧之间的图像对象的明显运动的模式.它是2D矢量场,其中每个矢量是位移矢量,表示从第一帧到第二帧的点的移动。如下图所示,是一个球在连续的5帧图像中的运动,箭头显示其位移矢量.位移矢量光流有很多应用场景如下:运动恢复结构视频压缩视频防抖动等光流法的工作原理基于如下假设:连续的两帧图像之间,目标像素灰度值不变。相邻的像素之间有相似的运动。数学原理✔️ 第...

weixin_39732991的博客 866

manimgl安装

安装manimgl

happytree001的博客 708

GMFlow核心原理深度解析:全局匹配如何革新光流估计

光流估计是计算机视觉领域的重要基础任务,用于估计视频序列中像素点的运动矢量。传统的**光流估计方法**通常采用迭代优化或局部匹配策略,但存在计算复杂、精度有限等问题。今天我们要深入解析的**GMFlow(Global Matching Flow)**,作为CVPR 2022 Oral论文提出的创新方法,通过**全局匹配**技术彻底改变了光流估计的范式。这种**全局匹配光流**方法不仅在精度上超越了

gitblog_01012的博客 726

视觉测量实战:C#上位机+OpenCVSharp 实现工业零件尺寸自动检测(精准像素级,工业级可落地)

本次开发的上位机界面遵循工业现场操作规范简洁、直观、按钮大、文字清晰、参数可视化调节,操作人员为车间工人/质检员,无需复杂操作,所有控件均为WinForms原生控件,拖拽即可完成布局本次实战完成了C#上位机+OpenCVSharp 工业零件尺寸自动检测系统的完整开发,这套方案是工业视觉测量的标准落地方案,适配95%的规则几何零件的尺寸检测场景,从五金件、塑胶件到电子元件,全覆盖无死角。测量效率提升100倍、精度提升10倍、无人工误差、可适配流水线实时检测。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 850

鸿蒙ArkUI内部API10以及11开发,输入框唤起输入法键盘,页面会被顶起的解决办法

鸿蒙ArkUI内部API10以及11开发,输入框唤起输入法键盘,页面会被顶起的解决办法

zmx781284440的博客 3215

RAFT光流论文总结

min⁡fEdataI1I2f⏟数据项:视觉相似性Esmoothf⏟正则化项:运动合理性\min_{f} \underbrace{E_{data}(I_1, I_2, f)}_{\text{数据项:视觉相似性}} + \underbrace{E_{smooth}(f)}_{\text{正则化项:运动合理性}}fmin​数据项:视觉相似性Edata​I1​I2​f​​正则化项:运动合理性Esmooth​f。

xinxiangwangzhi_的博客 595

使用Clumsy和Process Explorer定位软件高CPU占用问题

使用弱网模拟工具Clumsy和进程查看工具Process Explorer定位软件高CPU占用问题。

dvlinker的技术专栏 5709
上一篇: 教你如何挑选深度学习GPU
下一篇: 方差,标准差,协方差,相关系数含义,PCA算法和协方差矩阵的关系
什么鬼AAAAA
博客等级 码龄14年 193粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值