麽麽茶㊣ 发表于 2012-7-15 17:11:41

【初学者观摩】opencv高强度基础教程----一篇代码

本帖最后由 麽麽茶㊣ 于 2012-7-15 17:26 编辑

opencv常用功能其实不是想象用的那么难。

有arduino的基础便可学习,所应用的基础C语句和arduino是一致的。

如果只是一些普通的效果,更本不用去看C++。花半天时间将C语言看完即可。

这篇代码,基本上每个opencv的例子都会应用到这些函数。

它是项目的开篇,是为了达到最终效果所要写的基础内容。//一堆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;
}

Muller_r 发表于 2012-7-15 19:11:38

大神能不能帮我扫盲一下,OPENCV是干什么的

麽麽茶㊣ 发表于 2012-7-15 20:29:17

Muller_r 发表于 2012-7-15 19:11 static/image/common/back.gif
大神能不能帮我扫盲一下,OPENCV是干什么的

图像处理。摄像头捕捉、跟踪之类的~

vigiles 发表于 2012-7-16 07:29:26

能加上arduino做个监控?

麽麽茶㊣ 发表于 2012-7-16 09:55:53

vigiles 发表于 2012-7-16 07:29 static/image/common/back.gif
能加上arduino做个监控?

可以的~ 但还没试过~ 串口通信我试过~ 但还有点小问题~

http://www.geek-workshop.com/thread-1394-1-1.html

葱拌豆腐 发表于 2013-3-13 14:40:55

openCV感觉很高深的东西

friskit 发表于 2013-4-29 23:09:32

话说这些都是电脑上运行的吧— —。。。啥时候能把cv的非可视化的部分移植到arduino上就好了~

MicroCao 发表于 2013-4-30 14:42:45

谢谢楼主的资料,典型的干货,{:soso_e179:}
看后,对基本套路有点了解了,表示感谢。

zyzsorry 发表于 2013-5-14 11:20:37

很有用,我喜欢。谁然还没弄明白。

bemc 发表于 2013-10-24 09:13:32

有没有基础的教程或间接

22881916 发表于 2015-2-19 23:00:04

楼主费心了:lol
学了opencv一段时间,觉得你写的还是很清楚的:loveliness:
页: [1]
查看完整版本: 【初学者观摩】opencv高强度基础教程----一篇代码