本帖最后由 麽麽茶㊣ 于 2012-7-15 17:26 编辑
opencv常用功能其实不是想象用的那么难。
有arduino的基础便可学习,所应用的基础C语句和arduino是一致的。
如果只是一些普通的效果,更本不用去看C++。花半天时间将C语言看完即可。
这篇代码,基本上每个opencv的例子都会应用到这些函数。
它是项目的开篇,是为了达到最终效果所要写的基础内容。[pre lang="cpp" line="1"]//一堆opencv头文件
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
#include "cvaux.h"
int _tmain(int argc, _TCHAR* argv[])
{
//建立一堆窗口 原图 灰度图 二值图 轮廓图
cvNamedWindow("src",1);
cvNamedWindow("gray",1);
cvNamedWindow("temp",1);
cvNamedWindow("contours",1);
//建立一堆图像 加载一张图 转换为灰度图 二值图 轮廓图
IplImage* src = cvLoadImage("..//data//pic3.png",1);
IplImage* gray = cvCreateImage(cvGetSize(src),8,1);
IplImage* temp = cvCreateImage(cvGetSize(src),8,1);
IplImage* temp_c = cvCreateImage(cvGetSize(src),8,1);
IplImage* contours = cvCreateImage(cvGetSize(src),8,3);
//建立一个内存 用来处理二值图 可以想象为将二值图上寻找轮廓存放到一个空间中
CvMemStorage* storage = cvCreateMemStorage(0);
CvSeq* contour = 0;
//处理原图 其他所有的图像都要先清理一次。可以想象为画画前先要确保画布是干净的
cvZero(gray);
cvZero(temp);
cvZero(temp_c);
cvZero(contours);
//原图转化为灰度图
cvCvtColor(src,gray,CV_BGR2GRAY);
//将灰度图转化为二值图 也就是只有黑色和白色。 其中第二个参数可以变动。
//如果想实时变化观察,可以建立一个拖动条。可以看拖动条的一个帖子。
cvThreshold(gray,temp,200,255,CV_THRESH_BINARY_INV);
//将二值图拷贝一份 一份用来查看二值图是否清晰。一份用来做寻找轮廓处理。不想看二值图也可以不用。
cvCopy(temp,temp_c);
//在“二值图”上寻找轮廓。注意是二值图上!在learning opencv的书上所有转化函数都是gray~这个相当不规范。
cvFindContours(temp_c,storage,&contour);
//如果有前面一个函数,找到了轮廓。那就可以用这个函数将轮廓画在画布上。
//这里画轮廓就可以用彩色的了。所以一开始建立图像时我便建立了一个三通道的图。
cvDrawContours(contours,contour,CV_RGB(255,0,0),CV_RGB(255,0,0),255);
//将图像都显示出来 一个窗口显示一个图像。为了清晰的看出一个一个步骤是否正确。
cvShowImage("src",src);
cvShowImage("gray",gray);
cvShowImage("temp",temp);
cvShowImage("contours",contours);
cvWaitKey(0);
cvReleaseImage(&src);
cvReleaseImage(&gray);
cvReleaseImage(&temp);
cvReleaseImage(&temp_c);
cvReleaseImage(&contours);
cvDestroyAllWindows();
return 0;
}[/code] |