图像匹配之归一化积相关灰度匹配——opencv
2016-08-25 09:58
253 查看
#include<opencv2/opencv.hpp> #include<opencv2/highgui.hpp> #include<iostream> using namespace std; using namespace cv; int main() { IplImage*img = cvLoadImage("D:\\2.JPG"); IplImage*t_img = cvLoadImage("D:\\22.jpg"); IplImage*src_gray1 = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1); cvCvtColor(img, src_gray1, CV_RGB2GRAY); IplImage*t_gray1 = cvCreateImage(cvGetSize(t_img), IPL_DEPTH_8U, 1); cvCvtColor(t_img, t_gray1, CV_RGB2GRAY); unsigned int src_width = img->width; unsigned int src_height = img->height; unsigned int t_width = t_img->width; unsigned int t_height = t_img->height; int maxwidth = 0; int maxheight = 0; unsigned long InterRelateValue = 0, S_energy = 0, T_energy = 0; double matchvalue = 0, maxvalue = 0; IplImage*s_img = cvCreateImage(cvGetSize(t_img), IPL_DEPTH_8U, 1); for (int i = 0; i < (src_height-t_height); i++) { for (int j = 0; j < (src_width - t_width); j++) { cvSetImageROI(src_gray1, cvRect(j, i, t_width, t_height)); cvCopy(src_gray1, s_img, 0); cvResetImageROI(src_gray1); for (int m = 0; m < t_height; m++) { unsigned char*s_ptr = (unsigned char*)s_img->imageData + m*s_img->widthStep; unsigned char*t_ptr = (unsigned char*)t_gray1->imageData + m*t_gray1->widthStep; for (int n = 0; n < t_width; n++) { unsigned char s_value = s_ptr ; unsigned char t_value = t_ptr ; InterRelateValue = InterRelateValue + s_value*t_value; S_energy = S_energy + s_value*s_value; T_energy = T_energy + t_value*t_value; } } matchvalue = ((double)InterRelateValue) / (sqrt((double)S_energy)*sqrt((double)T_energy)); if (matchvalue > maxvalue) { maxvalue = matchvalue; maxwidth = j; maxheight = i; } InterRelateValue =0; S_energy = 0; T_energy = 0; } } IplImage*Match_image = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1); cvSet2D(Match_image, maxheight, maxwidth, cvScalar(255, 0, 0, 0)); cvRectangle(img, cvPoint(maxwidth, maxheight), cvPoint(maxwidth + t_width, maxheight + t_height), cvScalar(0, 0, 255, 0), 1, 8, 0); cvNamedWindow("img"); cvShowImage("img", img); cvNamedWindow("t_img"); cvShowImage("t_img", t_img); cvNamedWindow("Match_image"); cvShowImage("Match_image", Match_image); waitKey(); }
相关文章推荐
- 图像匹配之归一化积相关灰度匹配
- 图像匹配之归一化积相关灰度匹配
- 灰度图像归一化到0~255(对比度拉伸)的OpenCV代码实现
- 在OpenCV环境下写的灰度图像二维傅里叶换,幅值计算,频谱平移和将数值归一化到0到255区间的四个函数
- 图像匹配—NCC算法,即归一化互相关匹配
- OpenCV特征点检测匹配图像-----添加包围盒
- 利用Opencv进行图像灰度变换处理
- C++ OpenCV 实现RGB彩色图像转化成灰度图像再转换成二值图像
- OpenCV之imgproc 模块. 图像处理(4)直方图均衡化 直方图计算 直方图对比 反向投影 模板匹配
- 【OpenCV图像处理】十二、图像的直方图与相关处理(下)
- opencv2.4.9+vs2013中的等大图像的相似度匹配运算时间
- Opencv学习手册(四)--- 图像灰度变换
- opencv读入图像、灰度化、归一化、向量化
- 【OpenCV应用笔记】(彩色/灰度)图像像素值读取并保存到txt文件
- 对OpenCV Tutorial 2.4.9 图像特征匹配的补充
- OpenCV成长之路(9):特征点检测与图像匹配
- Python3与OpenCV3.3 图像处理(十四)--模板匹配
- 【OpenCV】SURF算法之视频图像实时特征点匹配
- 人脸图像的几何归一化和灰度归一化
- Opencv实现图像的灰度处理,二值化,阀值选择