Opencv c++Template/Pattern Matching Scale and Rotation invariant

Posted

技术标签:

【中文标题】Opencv c++Template/Pattern Matching Scale and Rotation invariant【英文标题】: 【发布时间】:2013-04-19 18:13:01 【问题描述】:

我想查看使用 openCv 和 c++ 的图像中是否存在模板。但是,由于拍摄图像的距离不同,图像的位置不同,匹配不正确。

这是我的代码:

IplImage* image    = cvLoadImage("C:/images/Photo0734.jpg", 1);
IplImage* templat  = cvLoadImage("C:/images/templatecoin.jpg", 1);
int percent =25;// declare a destination IplImage object with correct size, 
depth and  channels
IplImage* image3 = cvCreateImage( cvSize((int)((image->width*percent)/100) , 
(int)((image->height*percent)/100) ),image->depth, image->nChannels );

//use cvResize to resize source to a destination image
cvResize(image, image3);
IplImage* image2   = cvCreateImage(cvSize(image3->width, image3->height), 
IPL_DEPTH_8U,   1);
IplImage* templat2 = cvCreateImage(cvSize(templat->width, 
templat->height),   IPL_DEPTH_8U, 1); 

cvCvtColor(image3, image2, CV_BGR2GRAY);
cvCvtColor(templat, templat2, CV_BGR2GRAY);


int w = image3->width - templat->width + 1;
int h = image3->height - templat->height + 1;
result = cvCreateImage(cvSize(w, h), IPL_DEPTH_32F, 1);
cvMatchTemplate(image2, templat2, result, CV_TM_CCORR_NORMED);

double min_val, max_val;
CvPoint min_loc, max_loc;
cvMinMaxLoc(result, &min_val, &max_val, &min_loc, &max_loc);

cvRectangle(image3, max_loc, cvPoint(max_loc.x+templat->width, 
max_loc.y+templat->height), cvScalar(0,1,1), 1);

cvShowImage("src", image3);
//cvShowImage("result image", result);
cvWaitKey(0);

请注意,我无法使用“垫子”。是否可以使用 IplImage* 并使代码对缩放和旋转保持不变?帮帮我。

【问题讨论】:

也许“模式”比“模板”更适合您的问题... 【参考方案1】:

让我们看看:

SIFT Wiki

SIFT example

OpenCV SIFT documentation

我认为这对你有用。

【讨论】:

@Alexandre Bizeau-嗨,您的示例使用的是 cv::Mat,我无法使用它。这就是为什么我要问是否可以使用 IplImage 实现不变的旋转和缩放。 你不能使用因为你在做 C ?或者我错过了什么?让我看看 IplImage,如果有办法做到这一点,你的代码有什么问题。 请看一下这个:***.com/questions/16109471/… - 我无法使用 cv::Mat 加载图像,但是我设法使用 IplImage 这样做 你可以使用 cvMat 而不是谈论 cv::Mat (你正在谈论的垫子)吗? Mat 的 C 格式? 好的,但是一旦你用 cvLoadImage 加载了一个图像,你可以在 cvMat 中转换它,通常你应该这样做。如果您不能使用 Mat,那么您的 OpenCV 配置肯定有问题。不要回避你的第一个问题。之前尝试解决这个问题,因为 IplImage 现在不支持 OpenCV。

以上是关于Opencv c++Template/Pattern Matching Scale and Rotation invariant的主要内容,如果未能解决你的问题,请参考以下文章

c ++ opencv在窗口上显示图像

C/C++开发,linux下OpenCV+gcc+cmake编译环境搭建

图片模糊度判断程序(C++opencv)

opencv想到的

用OpenCV开发人脸识别软件,用Java好还是用C/C++好

C/C++ vs2017 OpenCV简单入门