OpenCV
跳转到导航
跳转到搜索
示例
区域匹配
/* ===================================================================== *
* 图像区域匹配
* 注意:如有多个匹配,将找到首先匹配的那个。
* ===================================================================== */
#include<stdio.h>
#include<cv.h>
#include<highgui.h>
/* --------------------------------------------------------------------- */
int main(int argc, char **argv){
IplImage *img, *template;
if(argc != 3){
fprintf(stderr, "give me two images please.\n");
return 1;
}
// 1 means CV_LOAD_IMAGE_COLOR (colorful, not grayscale)
if((img = cvLoadImage(argv[1], 1)) == 0 || (template = cvLoadImage(argv[2], 1)) == 0){
fprintf(stderr, "failed to load images\n");
return 2;
}
int resultW = img->width - template->width + 1;
int resultH = img->height - template->height + 1;
IplImage *result =
cvCreateImage(cvSize(resultW, resultH), IPL_DEPTH_32F, 1);
cvMatchTemplate(img, template, result, CV_TM_CCOEFF_NORMED);
double max_interlinkage = 0;
double min_interlinkage = 0;
CvPoint max_point;
CvPoint min_point;
CvPoint corner_point;
cvMinMaxLoc(result, &min_interlinkage, &max_interlinkage, &min_point,
&max_point, NULL);
if(max_interlinkage > 0.8){
corner_point =
cvPoint(max_point.x + template->width, max_point.y + template->height);
cvRectangle(img, max_point, corner_point, CV_RGB(255, 0, 255), 1, 8, 0);
printf("matched at (%d, %d).\n", max_point.x, max_point.y);
cvNamedWindow("Match", CV_WINDOW_AUTOSIZE);
cvShowImage("Match", img);
}else{
puts("no match.");
}
cvWaitKey(0); /* 等待时间,单位毫秒。0 为一直等待下去。 */
cvDestroyWindow("Match");
cvReleaseImage(&img);
return 0;
}
/* ===================================================================== *
* vim modeline *
* vim:se fdm=expr foldexpr=getline(v\:lnum)=~'^\\S.*{'?'>1'\:1: *
* ===================================================================== */
转换为灰度图
#include<stdio.h>
#include<stdbool.h>
#include<cv.h>
#include<highgui.h>
#define WIN_ORIG "图像"
#define WIN_P "处理后"
int main(int argc, char **argv){
if(argc != 2){
fprintf(stderr, "one image please.\n");
return 1;
}
IplImage* img;
IplImage* gray_img;
img = cvLoadImage(argv[1], 1);
cvNamedWindow(WIN_ORIG, CV_WINDOW_AUTOSIZE);
cvShowImage(WIN_ORIG, img);
cvNamedWindow(WIN_P, CV_WINDOW_AUTOSIZE);
/* only one channel after conversion */
gray_img = cvCreateImage(cvGetSize(img), img->depth, 1);
cvCvtColor(img, gray_img, CV_BGR2GRAY);
cvShowImage(WIN_P, gray_img);
char c;
while(true) {
c = cvWaitKey(0);
if(c == 'q')
break;
}
cvDestroyWindow(WIN_ORIG);
cvDestroyWindow(WIN_P);
cvReleaseImage(&img);
cvReleaseImage(&gray_img);
return 0;
}
外部链接
- OpenCV China's wiki
- OpenCV documentation
- Python与OpenCV人脸检测 « Xiaoxia{PG}
- OpenCV 直线检测 - 哆啦比猫's Blog - I'm an ArchLinuxer(代码示例)。霍夫变换直线检测houghlines及opencv的实现分析 - viewcode的专栏 - 博客频道 - CSDN.NET
- OpenCV检测场景内是否有移动物体 – WTF Daily Blog
资源
- SourceForge.net Repository - {opencvlibrary} Index of /trunk/opencv/data/haarcascades
- LSWMS, Line Segment detection using Weighted Mean Shift