自己在总结前人经验下弄的几个opencv封装函数
第一个是增加对比度的函数,就是变亮。
IplImage* EqualizeHistColorImage(IplImage *pImage)
{
IplImage *pEquaImage = cvCreateImage(cvGetSize(pImage), pImage->depth, ); // 原图像分成各通道后再均衡化,最后合并即彩色图像的直方图均衡化
const int MAX_CHANNEL = ;
IplImage *pImageChannel[MAX_CHANNEL] = {NULL}; int i;
for (i = ; i < pImage->nChannels; i++)
pImageChannel[i] = cvCreateImage(cvGetSize(pImage), pImage->depth, ); cvSplit(pImage, pImageChannel[], pImageChannel[], pImageChannel[], pImageChannel[]);//将传入图像的通道拆分,方便各个增亮 for (i = ; i < pImage->nChannels; i++)
cvEqualizeHist(pImageChannel[i], pImageChannel[i]);//各个通道的像素增亮,此函数第一个是传入,第二个参数是传出 cvMerge(pImageChannel[], pImageChannel[], pImageChannel[], pImageChannel[], pEquaImage);//将之前拆分后的各个通道的像素图片组合 for (i = ; i < pImage->nChannels; i++)
cvReleaseImage(&pImageChannel[i]);//逐个释放内存 return pEquaImage;//返回被处理过的图像
}
第二个是图像变黑白色,二值化和轮廓绘线。
void ChangeTheColor(int pos,IplImage* g_pGrayImage,CvSeq* g_pcvSeq)
{
// 转为二值图,黑白图
IplImage *pBinaryImage = cvCreateImage(cvGetSize(g_pGrayImage), IPL_DEPTH_8U, );
cvThreshold(g_pGrayImage, pBinaryImage, pos, , CV_THRESH_BINARY);
//第一个参数表示输入图像,必须为单通道灰度图。
//第二个参数表示输出的边缘图像,为单通道黑白图。
//第三个参数表示阈值,黑白色的范围
//第四个参数表示最大值。
//第五个参数表示运算方法。 // 显示二值图
cvShowImage("xxx", pBinaryImage); CvMemStorage *pcvMStorage = cvCreateMemStorage();
double fRho = ;
double fTheta = CV_PI / ;
int nMaxLineNumber = ; //最多检测条直线
double fMinLineLen = ; //最小线段长度
double fMinLineGap = ; //最小线段间隔
CvSeq *pcvSeqLines = cvHoughLines2(pBinaryImage, pcvMStorage, CV_HOUGH_PROBABILISTIC, fRho, fTheta, nMaxLineNumber, fMinLineLen, fMinLineGap); IplImage *pColorImage = cvCreateImage(cvGetSize(g_pGrayImage), IPL_DEPTH_8U, );
cvCvtColor(pBinaryImage, pColorImage, CV_GRAY2BGR);
int i;
for(i = ; i < pcvSeqLines->total; i++) {
CvPoint* line = (CvPoint*)cvGetSeqElem(pcvSeqLines, i);
cvLine(pColorImage, line[], line[], CV_RGB(,,), );
} cvShowImage("qq", pColorImage); CvMemStorage* cvMStorage = cvCreateMemStorage();
// 检索轮廓并返回检测到的轮廓的个数
cvFindContours(pBinaryImage,cvMStorage, &g_pcvSeq,sizeof(CvContour),);//这个要和cvDrawContrours连用
//cvFindContours
//函数功能:对图像进行轮廓检测,这个函数将生成一条链表以保存检测出的各个轮廓信息,并传出指向这条链表表头的指针。
//第一个参数:输入的图像
//第二个参数:内存容器
//第三个参数:存输出信息的参数
//4.5.6略 IplImage *pOutlineImage = cvCreateImage(cvGetSize(g_pGrayImage), IPL_DEPTH_8U, );
int _levels = ;
cvZero(pOutlineImage);
cvDrawContours(pOutlineImage, g_pcvSeq, CV_RGB(,,), CV_RGB(,,), _levels);
//第一个参数表示输入图像,函数将在这张图像上绘制轮廓。
//第二个参数表示指向轮廓链表的指针。
//第三个参数和第四个参数表示颜色,绘制时会根据轮廓的层次来交替使用这二种颜色。255,0,0->红,0,255,0->绿,0,0,255蓝
//第五个参数表示绘制轮廓的最大层数,如果是0,只绘制contour;如果是1,追加绘制和contour同层的所有轮廓;
//如果是2,追加绘制比contour低一层的轮廓,以此类推;如果值是负值,则函数并不绘制contour后的轮廓,但是将画出其子轮廓,一直到abs(max_level) - 1层。
//第六个参数表示轮廓线的宽度,如果为CV_FILLED则会填充轮廓内部。
//第七个参数表示轮廓线的类型。
//第八个参数表示偏移量,如果传入(10,20),那绘制将从图像的(10,20)处开始。
cvShowImage("qqqq", pOutlineImage); cvReleaseImage(&pColorImage);
cvReleaseMemStorage(&cvMStorage);
cvReleaseImage(&pBinaryImage);
cvReleaseImage(&pOutlineImage);
}
第三个是三通道图片的像素全访问,可以自己通过改变像素值来改变图像颜色。
oid visit_image(IplImage* Image){
const char * name="";
cvNamedWindow(name,);
uchar* data=(uchar *)Image->imageData;
int step = Image->widthStep/sizeof(uchar);
int channels = Image->nChannels;
for(int i=;i<Image->height;i++){
for(int j=;j<Image->width;j++){
data[i*step+j*channels+]=;//通道1,我这里全改了1
data[i*step+j*channels+]=;//不赋值就没改变
data[i*step+j*channels+]=;
}
}
cvShowImage(name,Image);
cvWaitKey();
cvReleaseImage(&Image);
cvDestroyWindow(name);
}
第四个是从两张图片中找到不同处,并以第三张图输出。可以说是大家来找茬的外挂代码。
void Get_The_Different_From_The_Cctv(IplImage* image1,IplImage* image2){
IplImage* image_1=cvCreateImage(cvSize(image1->width,image1->height),IPL_DEPTH_8U,);
IplImage* image_2=cvCreateImage(cvSize(image1->width,image1->height),IPL_DEPTH_8U,);
IplImage* image_and=cvCreateImage(cvSize(image1->width,image1->height),IPL_DEPTH_8U,);
cvCvtColor(image1,image_1,CV_BGR2GRAY);
cvCvtColor(image2,image_2,CV_BGR2GRAY);
cvAbsDiff(image_1,image_2,image_and);
cvNamedWindow("nimad",);
cvShowImage("nimad",image_and);
cvWaitKey();
cvDestroyWindow("nimad");
cvReleaseImage(&image_and);
}
正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!旁边有“推荐”二字,你就顺手把它点了吧,相得准,我分文不收;相不准,你也好回来找我。
自己在总结前人经验下弄的几个opencv封装函数的更多相关文章
- 9.2.2 .net framework下的MVC 控件的封装(下)
控件封装的部分说明 可能有人觉得应该前后端分离,我也承认这是应该的方向,我们也在考虑使用ng2等简化前端.但是,我们封装控件还是因为如下原因综合考虑的: 我们这是个框架,上面支撑了许多个应用,包含几百 ...
- 在 mongodb 终端环境下写多行 javascript 代码、函数
工作中碰到一个问题,需要把某个 collection 中的某些符合条件的数据取出来,逐行处理其中某些字段.mongodb 终端下支持直接写 js 代码.函数,也可以运行 js 文件.1 首先需要设置 ...
- Linux下c基于openssl生成MD5的函数
Linux下openssl提供了一系列哈希及加密的函数,如果调用openssl提供的MD5函数生成任意字符串的MD5呢?下面提供了一段代码实现Linux下c字符串生成md5的函数. 具体代码: 1 2 ...
- 查看Linux下*.a库文件中文件、函数、变量
查看Linux下*.a库文件中文件.函数.变量等情况在Linux 下经常需要链接一些 *.a的库文件,那怎么查看这些*.a 中包 含哪些文件.函数.变量: 1. 查看文件:ar -t xxx.a 2. ...
- Golang调用windows下的dll动态库中的函数
Golang调用windows下的dll动态库中的函数 使用syscall调用. package main import ( "fmt" "syscall" & ...
- ubuntu 14.04 下利用apt-get方式安装opencv
转载,请注明出处:http://blog.csdn.net/tina_ttl 目录(?)[+] 标签(空格分隔): Linux学习 OpenCV ubuntu 1404 下利用apt-get方式安装O ...
- Golang调用windows下的dll动态库中的函数 Golang 编译成 DLL 文件
Golang调用windows下的dll动态库中的函数 package main import ( "fmt" "syscall" "time&quo ...
- Dalvik模式下基于Android运行时类加载的函数dexFindClass脱壳
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78003184 前段时间在看雪论坛发现了<发现一个安卓万能脱壳方法>这篇 ...
- 【记录一个问题】macos下lldb调试opencv的一个程序,出现“failed to load objfile for”错误,并且无法调试进入opencv的函数
opencv编译使用了Debug版本,打开了BUILD_WITH_DEBUG_INFO=ON选项. 发现问题后,我又在CMAKE_CXX_FLAGS_DEBUG中设置为 -g -ggdb3,在CMAK ...
随机推荐
- 关于iOS后台问题( 一 )(ios后台刷新,后台定位,后台下载,真后台)
关于iOS的后台,以下引用一些文段进行一下脑补,请同学们大致看一下,有个基础,原文出处 -------------------------------------------------------- ...
- homework-01
我的GitHub账户名是Firedamp. 其实我最一开始看到最大子序列的和这个题目,最先想到的就是最简单的O(n^3)的算法,在课堂上教的也确实是这个程序,但是这种算法的时间复杂度必然是最高的,在数 ...
- cocos2dx 实现flappybird
前两天在博客园看到网友实现的一个网页版的flappy bird,挂在360游戏平台,玩了一会儿得分超低,就很想自己做一个.刚好这两天炫舞的活都清了,就弄一下玩玩. 效果图 布局类GameScene.h ...
- 有关JVM配置参数含义
1.参数的含义-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M-vmargs 说明后面是VM的参数,所以后面的其实都是JV ...
- CentOS 6.5系统安装配置LAMP(Apache+PHP5+MySQL)服务器环境
安装篇: 一.安装Apache yum install httpd #根据提示,输入Y安装即可成功安装 /etc/init.d/httpd start#启动Apache 备注:Apache启动之后会提 ...
- 那点你不知道的XHtml(Xml+Html)语法知识(DTD、XSD)
什么是XHtml: 摘录网上的一句话,XHTML就是一个扮演着类似HTML的角色的XML. XHtml可当模板引擎应用: CYQ.Data 框架里有一套XHtmlAction模板引擎, 应用在QBlo ...
- 开源消息队列:NetMQ
NetMQ 是 ZeroMQ的C#移植版本. ZeroMQ是一个轻量级的消息内核,它是对标准socket接口的扩展.它提供了一种异步消息队列,多消息模式,消息过滤(订阅),对多种传输协议的无缝访问. ...
- ENode框架Conference案例分析系列之 - ENode框架初始化
前言 Conference案例是使用ENode框架来开发的.之前我没有介绍过ENode框架是如何启动的,以及启动时要注意的一些点,估计很多人对ENode框架的初始化这一块感觉很复杂,一头雾水.所以,本 ...
- 你get了无数技能,为什么一事无成
前几日看到阮一峰老师的发的一句话,颇有感慨,「你只是坐在电脑前,往网上发表了一段文字或者一张图片,随便什么,就能够接触到多少陌生的灵魂.这就是我热爱互联网的原因」.我打心底认为这是一个最好的时代, ...
- CSS3 Flexbox不迷路指南
Flexbox早有耳闻,但是决定切实尝试一番,还是因为看了这条围脖: 我觉得用flexbox可以实现,但是发觉无从下手,属性特性都不了解.趁此机会,学习下. 英文原版参考资料在这里:A Complet ...