【原创】 opencv 实现特定形状视频跟踪,图像裁剪
Author: chad
Mail: linczone@163.com
先看效果:
如上图所示,程序通过摄像头采集图像,然后使用cvCanny算子实现边缘检测,最后使用cvFindContours查找轮廓,进而根据预设参数寻找对应图像区域.并完成图像裁剪与选装.
程序如下:
/*
2015-07-24 linczone@163.com
编译命令如下:
g++ `pkg-config opencv --cflags` main.c -o meter `pkg-config opencv --libs`
*/
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cv.h>
#include <highgui.h>
#include <cmath>
#include <opencv/highgui.h>
#include <stdio.h>
using namespace std;
//旋转,缩放
int WarpAffine(IplImage *src, double angle, double scale )
{
CvPoint2D32f srcTri[3], dstTri[3];
CvMat* rot_mat = cvCreateMat(2,3,CV_32FC1);
IplImage *dst;
dst = cvCloneImage(src);
dst->origin = src->origin;
cvZero(dst);
//COMPUTE ROTATION MATRIX
CvPoint2D32f center = cvPoint2D32f(src->width/2,
src->height/2);
cv2DRotationMatrix(center,angle,scale,rot_mat);
cvWarpAffine(src,dst,rot_mat);
cvCopy(dst,src);
cvReleaseImage(&dst);
cvReleaseMat(&rot_mat);
return 0;
}
//void callTrackbar( int position )
//{
//}
int main(int argc,char *argv[])
{
char tmpbuf[100];
CvCapture* capture ;
cvNamedWindow("out");
if( argc != 1 )
capture = cvCreateFileCapture( argv[1] ); //从视频文件获取图像
else
capture = cvCreateCameraCapture( 1 ); //从视频设备获取图像
IplImage *frame;
IplImage *out = NULL;
I