极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12841|回复: 11

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

[复制链接]
发表于 2012-7-15 17:11:41 | 显示全部楼层 |阅读模式
本帖最后由 麽麽茶㊣ 于 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]
回复

使用道具 举报

发表于 2012-7-15 19:11:38 | 显示全部楼层
大神能不能帮我扫盲一下,OPENCV是干什么的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-15 20:29:17 | 显示全部楼层
Muller_r 发表于 2012-7-15 19:11
大神能不能帮我扫盲一下,OPENCV是干什么的

图像处理。摄像头捕捉、跟踪之类的~
回复 支持 反对

使用道具 举报

发表于 2012-7-16 07:29:26 | 显示全部楼层
能加上arduino做个监控?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-16 09:55:53 | 显示全部楼层
vigiles 发表于 2012-7-16 07:29
能加上arduino做个监控?


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

http://www.geek-workshop.com/thread-1394-1-1.html
回复 支持 反对

使用道具 举报

发表于 2013-3-13 14:40:55 | 显示全部楼层
openCV感觉很高深的东西
回复 支持 反对

使用道具 举报

发表于 2013-4-29 23:09:32 | 显示全部楼层
话说这些都是电脑上运行的吧— —。。。啥时候能把cv的非可视化的部分移植到arduino上就好了~
回复 支持 反对

使用道具 举报

发表于 2013-4-30 14:42:45 | 显示全部楼层
谢谢楼主的资料,典型的干货,{:soso_e179:}
看后,对基本套路有点了解了,表示感谢。
回复 支持 反对

使用道具 举报

发表于 2013-5-14 11:20:37 | 显示全部楼层
很有用,我喜欢。谁然还没弄明白。
回复 支持 反对

使用道具 举报

发表于 2013-10-24 09:13:32 | 显示全部楼层
有没有基础的教程或间接
回复 支持 反对

使用道具 举报

发表于 2015-2-19 23:00:04 | 显示全部楼层
楼主费心了
学了opencv一段时间,觉得你写的还是很清楚的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2020-9-23 18:31 , Processed in 0.090221 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表