Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中圆形图像的OpenCV模板匹配_Java_Image_Opencv_Image Processing_Template Matching - Fatal编程技术网

Java中圆形图像的OpenCV模板匹配

Java中圆形图像的OpenCV模板匹配,java,image,opencv,image-processing,template-matching,Java,Image,Opencv,Image Processing,Template Matching,我不总是有正方形/矩形的图像,有时我也应该匹配圆形图像。下面是两张图片的例子。Ball是模板图像,第二个是搜索模板的源。我可以使模板的背景透明,但这会产生错误,将其设置为白色会降低比赛分数,因为正如您在源图像上看到的,球周围没有白色。这仅仅是两个示例图片。你有什么建议/解决方案吗 如果知道属于模板的像素,可以编写匹配器 绝对差值总和试验(伪代码) mati,T//图像和模板 矢量模板像素 矩形滑动窗口 向量匹配率 对于图像中的所有行 更新滑动窗口 适用于图像中的所有颜色 更新滑动窗口 材料W=

我不总是有正方形/矩形的图像,有时我也应该匹配圆形图像。下面是两张图片的例子。Ball是模板图像,第二个是搜索模板的源。我可以使模板的背景透明,但这会产生错误,将其设置为白色会降低比赛分数,因为正如您在源图像上看到的,球周围没有白色。这仅仅是两个示例图片。你有什么建议/解决方案吗


如果知道属于模板的像素,可以编写匹配器

绝对差值总和试验(伪代码)

mati,T//图像和模板
矢量模板像素
矩形滑动窗口
向量匹配率
对于图像中的所有行
更新滑动窗口
适用于图像中的所有颜色
更新滑动窗口
材料W=I(滑动窗)
总和=0
对于模板中的所有行
对于模板中的所有列
if(模板_像素包含像素i)
总和+=abs(W(i)-T(i))
结束
结束
匹配率。回推(总和)
结束
结束
minMaxLoc(匹配率)

并在图像行上使用多线程对其进行优化

如果您知道属于模板的像素,则可以编写匹配器

绝对差值总和试验(伪代码)

mati,T//图像和模板
矢量模板像素
矩形滑动窗口
向量匹配率
对于图像中的所有行
更新滑动窗口
适用于图像中的所有颜色
更新滑动窗口
材料W=I(滑动窗)
总和=0
对于模板中的所有行
对于模板中的所有列
if(模板_像素包含像素i)
总和+=abs(W(i)-T(i))
结束
结束
匹配率。回推(总和)
结束
结束
minMaxLoc(匹配率)

并在图像行上使用多线程对其进行优化

如果您知道属于模板的像素,则可以编写匹配器

绝对差值总和试验(伪代码)

mati,T//图像和模板
矢量模板像素
矩形滑动窗口
向量匹配率
对于图像中的所有行
更新滑动窗口
适用于图像中的所有颜色
更新滑动窗口
材料W=I(滑动窗)
总和=0
对于模板中的所有行
对于模板中的所有列
if(模板_像素包含像素i)
总和+=abs(W(i)-T(i))
结束
结束
匹配率。回推(总和)
结束
结束
minMaxLoc(匹配率)

并在图像行上使用多线程对其进行优化

如果您知道属于模板的像素,则可以编写匹配器

绝对差值总和试验(伪代码)

mati,T//图像和模板
矢量模板像素
矩形滑动窗口
向量匹配率
对于图像中的所有行
更新滑动窗口
适用于图像中的所有颜色
更新滑动窗口
材料W=I(滑动窗)
总和=0
对于模板中的所有行
对于模板中的所有列
if(模板_像素包含像素i)
总和+=abs(W(i)-T(i))
结束
结束
匹配率。回推(总和)
结束
结束
minMaxLoc(匹配率)

并在图像行上使用多线程对其进行优化

没关系,您仍然可以使用
matchTemplate()
并获得优异的结果:


。顺便说一句,这是在那里共享的演示的输出。

没关系,您仍然可以使用
matchTemplate()
并获得优异的结果:


。顺便说一句,这是在那里共享的演示的输出。

没关系,您仍然可以使用
matchTemplate()
并获得优异的结果:


。顺便说一句,这是在那里共享的演示的输出。

没关系,您仍然可以使用
matchTemplate()
并获得优异的结果:


。顺便说一句,这是在那里共享的演示的输出。

我想你也可以使用直方图反投影。在那里,您还可以使用任意形状遮罩。将遮罩与反向投影图像卷积,您将在图像中对象出现的区域中检测到峰值,如下面的图像(颜色映射和缩放)所示

反向投影:

召集:

编辑:

这是基于此。我正在试验,希望能在博客上发表文章。 这是在C++中。< /P>
// model histogram: this is the football template
calcHist(&model32fc3, 1, (const int*)channels, modelMask, histModel, 3, (const int*)histSize, (const float**)ranges, true, false);
// image histogram
calcHist(&image32fc3, 1, (const int*)channels, Mat(), histImage, 3, (const int*)histSize, (const float**)ranges, true, false);
// ratio histogram
divide(histModel, histImage, histRatio);
cv::min(histRatio, 1.0, histRatio);
// backproject ratio histogram
calcBackProject(&image32fc3, 1, (const int*)channels, histRatio, backprj, (const float**)ranges);
// convolve the kernel with the backprojected image
filter2D(backprj, conv, CV_32F, modelMask);

我想你也可以用直方图反投影来做这个。在那里,您还可以使用任意形状遮罩。将遮罩与反向投影图像卷积,您将在图像中对象出现的区域中检测到峰值,如下面的图像(颜色映射和缩放)所示

反向投影:

召集:

编辑:

这是基于此。我正在试验,希望能在博客上发表文章。 这是在C++中。< /P>
// model histogram: this is the football template
calcHist(&model32fc3, 1, (const int*)channels, modelMask, histModel, 3, (const int*)histSize, (const float**)ranges, true, false);
// image histogram
calcHist(&image32fc3, 1, (const int*)channels, Mat(), histImage, 3, (const int*)histSize, (const float**)ranges, true, false);
// ratio histogram
divide(histModel, histImage, histRatio);
cv::min(histRatio, 1.0, histRatio);
// backproject ratio histogram
calcBackProject(&image32fc3, 1, (const int*)channels, histRatio, backprj, (const float**)ranges);
// convolve the kernel with the backprojected image
filter2D(backprj, conv, CV_32F, modelMask);

我想你也可以用直方图反投影来做这个。在那里,您还可以使用任意形状遮罩。将遮罩与反向投影图像卷积,您将在图像中对象出现的区域中检测到峰值,如下面的图像(颜色映射和缩放)所示

反向投影:

召集:

编辑:

这是基于此。我正在试验,希望能在博客上发表文章。 这是在C++中。< /P>
// model histogram: this is the football template
calcHist(&model32fc3, 1, (const int*)channels, modelMask, histModel, 3, (const int*)histSize, (const float**)ranges, true, false);
// image histogram
calcHist(&image32fc3, 1, (const int*)channels, Mat(), histImage, 3, (const int*)histSize, (const float**)ranges, true, false);
// ratio histogram
divide(histModel, histImage, histRatio);
cv::min(histRatio, 1.0, histRatio);
// backproject ratio histogram
calcBackProject(&image32fc3, 1, (const int*)channels, histRatio, backprj, (const float**)ranges);
// convolve the kernel with the backprojected image
filter2D(backprj, conv, CV_32F, modelMask);

我想你也可以用直方图反投影来做这个。在那里,您还可以使用任意形状遮罩。将遮罩与反向投影图像卷积,您将在图像中对象出现的区域中检测到峰值,如下面的图像(颜色映射和缩放)所示

反向投影:

召集:

编辑:

这是基于此。我正在试验,希望能在博客上发表文章。 这是在C++中。< /P>
// model histogram: this is the football template
calcHist(&model32fc3, 1, (const int*)channels, modelMask, histModel, 3, (const int*)histSize, (const float**)ranges, true, false);
// image histogram
calcHist(&image32fc3, 1, (const int*)channels, Mat(), histImage, 3, (const int*)histSize, (const float**)ranges, true, false);
// ratio histogram
divide(histModel, histImage, histRatio);
cv::min(histRatio, 1.0, histRatio);
// backproject ratio histogram
calcBackProject(&image32fc3, 1, (const int*)channels, histRatio, backprj, (const float**)ranges);
// convolve the kernel with the backprojected image
filter2D(backprj, conv, CV_32F, modelMask);

我不知道这是不是python