OpenCV在限定的ROI中进行模版匹配问题,求指点!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV在限定的ROI中进行模版匹配问题,求指点!!相关的知识,希望对你有一定的参考价值。

我写了一个代码,是关于OpenCV模板匹配的,如果对整个图片进行模板匹配的话,效率很明显会很低,所以我就设置了两个ROI,其中roi1属于搜索范围,roi2属于是我想要匹配的模板,让roi2在roi1里面进行搜索,但是程序运行完之后,发现系统匹配的那个ROI 压根就不是我想要的结果,百思不得其解,希望懂的大牛给指点下,谢谢啦~~如何才能对一个图片中的两个ROI(其中一个被另外一个所包含的)区域进行匹配呢?请不要用IplImage类的,因为我用的是Mat类写的代码。

参考技术A 你把这块区域拷贝出来新建一个图像扫描不行吗?
再说如果设置了ROI处理区域就是在这里面的啊!

放程序吧!
反正你这段程序也不涉及到什么高科技,放出来我给你看看。

OpenCV MatchTemplate 仅限于 roi

【中文标题】OpenCV MatchTemplate 仅限于 roi【英文标题】:OpenCV MatchTemplate limited to roi 【发布时间】:2013-08-08 07:30:58 【问题描述】:

我的问题与在 OpenCV 中使用 matchTemplate 有关。我可以使用该功能在整个图像中查找模板。可以将“搜索区域”限制在图像内的受限区域,即使用 roi?我尝试在调用 matchTemplate 之前设置 roi,但这没有任何效果。

那么,你知道有什么方法可以将模板的搜索限制在图像的一个子区域吗?那是因为我知道我的目标只能在这个有限的区域内找到。

以下是直接取自 OpenCV 示例的一些代码:

void MatchingMethod( int, void* )

    // Source image to display    
    Mat img_display;
    img.copyTo( img_display );

    // Create the result matrix
    int result_cols =  img.cols - templ.cols + 1;
    int result_rows = img.rows - templ.rows + 1;
    result.create( result_cols, result_rows, CV_32FC1 );

    // Do the Matching and Normalize
    img.adjustROI(100, 100, 500, 500);
    matchTemplate( img, templ, result, match_method );
    normalize( result, result, 0, 1, NORM_MINMAX, -1, Mat() );

    // Localizing the best match with minMaxLoc
    double minVal; double maxVal; Point minLoc; Point maxLoc;
    Point matchLoc;
    minMaxLoc( result, &minVal, &maxVal, &minLoc, &maxLoc, Mat() );

    // For SQDIFF and SQDIFF_NORMED, the best matches are lower values. For all the other methods, the higher the better
    if( match_method  == CV_TM_SQDIFF || match_method == CV_TM_SQDIFF_NORMED )
     matchLoc = minLoc; 
    else
     matchLoc = maxLoc; 

    // Show me what you got
    rectangle( img_display, matchLoc, Point( matchLoc.x + templ.cols , matchLoc.y + templ.rows ), Scalar::all(0), 2, 8, 0 );
    rectangle( result,    matchLoc, Point( matchLoc.x + templ.cols , matchLoc.y + templ.rows ), Scalar::all(0), 2, 8, 0 );

    imshow( image_window, img_display );
    imshow( result_window, result );

【问题讨论】:

一段代码可能显示你的尝试? 【参考方案1】:

确定!

Rect roi( x,y,w,h );
matchTemplate( img( roi ), templ, result, method );

【讨论】:

以上是关于OpenCV在限定的ROI中进行模版匹配问题,求指点!!的主要内容,如果未能解决你的问题,请参考以下文章

C++ OpenCV模版匹配

OpenCV2马拉松第13圈——模版匹配

使用 openCV 进行相机校准 - cv2.getOptimalNewCameraMatrix 导致 roi 为零

使用 OpenCV Cuda ORB 特征检测器

OpenCV_复制一个或多个ROI图像区域

OpenCV-C++选择提取感兴趣区域(ROI区域)附用鼠标选取ROI区域的代码