第一个是增加对比度的函数,就是变亮。

 1 IplImage* EqualizeHistColorImage(IplImage *pImage)
 2 {
 3     IplImage *pEquaImage = cvCreateImage(cvGetSize(pImage), pImage->depth, 3);
 4
 5     // 原图像分成各通道后再均衡化,最后合并即彩色图像的直方图均衡化
 6     const int MAX_CHANNEL = 4;
 7     IplImage *pImageChannel[MAX_CHANNEL] = {NULL};
 8
 9     int i;
10     for (i = 0; i < pImage->nChannels; i++)
11         pImageChannel[i] = cvCreateImage(cvGetSize(pImage), pImage->depth, 1);
12
13     cvSplit(pImage, pImageChannel[0], pImageChannel[1], pImageChannel[2], pImageChannel[3]);//将传入图像的通道拆分,方便各个增亮
14
15     for (i = 0; i < pImage->nChannels; i++)
16         cvEqualizeHist(pImageChannel[i], pImageChannel[i]);//各个通道的像素增亮,此函数第一个是传入,第二个参数是传出
17
18     cvMerge(pImageChannel[0], pImageChannel[1], pImageChannel[2], pImageChannel[3], pEquaImage);//将之前拆分后的各个通道的像素图片组合
19
20     for (i = 0; i < pImage->nChannels; i++)
21         cvReleaseImage(&pImageChannel[i]);//逐个释放内存
22
23     return pEquaImage;//返回被处理过的图像
24 }


第二个是图像变黑白色,二值化和轮廓绘线。

 1 void ChangeTheColor(int pos,IplImage* g_pGrayImage,CvSeq* g_pcvSeq)
 2 {
 3     // 转为二值图,黑白图
 4     IplImage *pBinaryImage = cvCreateImage(cvGetSize(g_pGrayImage), IPL_DEPTH_8U, 1);
 5     cvThreshold(g_pGrayImage, pBinaryImage, pos, 255, CV_THRESH_BINARY);
 6     //第一个参数表示输入图像,必须为单通道灰度图。
 7     //第二个参数表示输出的边缘图像,为单通道黑白图。
 8     //第三个参数表示阈值,黑白色的范围
 9     //第四个参数表示最大值。
10     //第五个参数表示运算方法。
11
12     // 显示二值图
13     cvShowImage("xxx", pBinaryImage);
14
15
16     CvMemStorage *pcvMStorage = cvCreateMemStorage();
17     double fRho = 1;
18     double fTheta = CV_PI / 180;
19     int nMaxLineNumber = 500;   //最多检测条直线
20     double fMinLineLen = 50;   //最小线段长度
21     double fMinLineGap = 20;   //最小线段间隔
22     CvSeq *pcvSeqLines = cvHoughLines2(pBinaryImage, pcvMStorage, CV_HOUGH_PROBABILISTIC, fRho, fTheta, nMaxLineNumber, fMinLineLen, fMinLineGap);
23
24
25     IplImage *pColorImage = cvCreateImage(cvGetSize(g_pGrayImage), IPL_DEPTH_8U, 3);
26     cvCvtColor(pBinaryImage, pColorImage, CV_GRAY2BGR);
27     int i;
28     for(i = 0; i < pcvSeqLines->total; i++)    {
29         CvPoint* line = (CvPoint*)cvGetSeqElem(pcvSeqLines, i);
30         cvLine(pColorImage, line[0], line[1], CV_RGB(255,0,0), 2);
31     }
32
33
34     cvShowImage("qq", pColorImage);
35
36     CvMemStorage* cvMStorage = cvCreateMemStorage();
37     // 检索轮廓并返回检测到的轮廓的个数
38     cvFindContours(pBinaryImage,cvMStorage, &g_pcvSeq,sizeof(CvContour),2);//这个要和cvDrawContrours连用
39     //cvFindContours
40     //函数功能:对图像进行轮廓检测,这个函数将生成一条链表以保存检测出的各个轮廓信息,并传出指向这条链表表头的指针。
41     //第一个参数:输入的图像
42     //第二个参数:内存容器
43     //第三个参数:存输出信息的参数
44     //4.5.6略
45
46     IplImage *pOutlineImage = cvCreateImage(cvGetSize(g_pGrayImage), IPL_DEPTH_8U, 3);
47     int _levels = 5;
48     cvZero(pOutlineImage);
49     cvDrawContours(pOutlineImage, g_pcvSeq, CV_RGB(255,0,0), CV_RGB(0,255,0), _levels);
50     //第一个参数表示输入图像,函数将在这张图像上绘制轮廓。
51     //第二个参数表示指向轮廓链表的指针。
52     //第三个参数和第四个参数表示颜色,绘制时会根据轮廓的层次来交替使用这二种颜色。255,0,0->红,0,255,0->绿,0,0,255蓝
53     //第五个参数表示绘制轮廓的最大层数,如果是0,只绘制contour;如果是1,追加绘制和contour同层的所有轮廓;
54     //如果是2,追加绘制比contour低一层的轮廓,以此类推;如果值是负值,则函数并不绘制contour后的轮廓,但是将画出其子轮廓,一直到abs(max_level) - 1层。
55     //第六个参数表示轮廓线的宽度,如果为CV_FILLED则会填充轮廓内部。
56     //第七个参数表示轮廓线的类型。
57     //第八个参数表示偏移量,如果传入(10,20),那绘制将从图像的(10,20)处开始。
58     cvShowImage("qqqq", pOutlineImage);
59
60     cvReleaseImage(&pColorImage);
61     cvReleaseMemStorage(&cvMStorage);
62     cvReleaseImage(&pBinaryImage);
63     cvReleaseImage(&pOutlineImage);
64 }


第三个是三通道图片的像素全访问,可以自己通过改变像素值来改变图像颜色。

 1 oid visit_image(IplImage* Image){
 2     const char * name="913337456";
 3     cvNamedWindow(name,1);
 4     uchar* data=(uchar *)Image->imageData;
 5     int step = Image->widthStep/sizeof(uchar);
 6     int channels = Image->nChannels;
 7     for(int i=0;i<Image->height;i++){
 8        for(int j=0;j<Image->width;j++){
 9            data[i*step+j*channels+0]=1;//通道1,我这里全改了1
10            data[i*step+j*channels+1]=2;//不赋值就没改变
11            data[i*step+j*channels+2]=3;
12        }
13     }
14     cvShowImage(name,Image);
15     cvWaitKey(0);
16     cvReleaseImage(&Image);
17     cvDestroyWindow(name);
18 }


第四个是从两张图片中找到不同处,并以第三张图输出。可以说是大家来找茬的外挂代码。

 1 void Get_The_Different_From_The_Cctv(IplImage* image1,IplImage* image2){
 2     IplImage* image_1=cvCreateImage(cvSize(image1->width,image1->height),IPL_DEPTH_8U,1);
 3     IplImage* image_2=cvCreateImage(cvSize(image1->width,image1->height),IPL_DEPTH_8U,1);
 4     IplImage* image_and=cvCreateImage(cvSize(image1->width,image1->height),IPL_DEPTH_8U,1);
 5     cvCvtColor(image1,image_1,CV_BGR2GRAY);
 6     cvCvtColor(image2,image_2,CV_BGR2GRAY);
 7     cvAbsDiff(image_1,image_2,image_and);
 8     cvNamedWindow("nimad",1);
 9     cvShowImage("nimad",image_and);
10     cvWaitKey(0);
11     cvDestroyWindow("nimad");
12     cvReleaseImage(&image_and);
13 }

正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!旁边有“推荐”二字,你就顺手把它点了吧,相得准,我分文不收;相不准,你也好回来找我。

转载于:https://www.cnblogs.com/linguanh/p/4267464.html

自己在总结前人经验下弄的几个opencv封装函数相关推荐

  1. [转载]word尾注插入参考文献——前人经验+自己总结

    [转载]word尾注插入参考文献--前人经验+自己总结 1. 以尾注的方式插入第一个参考文献. 将光标定位于word文档中将要插入参考文献的位置,按"插入/引用/脚注和尾注".出现 ...

  2. linux ubuntu16.04 编译opencv教程(没编过,有时间再弄,推流不用opencv也行的)

    文章目录 下源码 编译 配置opencv环境 下源码 https://github.com/opencv/opencv/releases/tag/4.4.0 然后在ubuntu里建个文件夹把它扔进去, ...

  3. Windows Mobile下访问Sqlite的Native C++封装

    背景 当前移动设备开发领域,在本地数据存储方面,Sqlite几乎成了事实标准,Andriod (android.database.sqlite),iPhone (SQLite for iPhone S ...

  4. window系统下C语言找不到fork()函数

    window系统下C语言找不到fork()函数 有次模拟进程时,想在window系统下调用fork()函数,但是就是引入相关头文件都无法找到函数,一开始是怀疑是否引入的头文件有误或者缺失,发现并没有缺 ...

  5. 【转】Linux下c++调用自己编写的matlab函数:通过mcc动态链接库.so实现

    转自:Linux下c++调用自己编写的matlab函数:通过mcc动态链接库.so实现_Jaster_wisdom的专栏-CSDN博客 之前在这里和这里调用了matlab自带的一些函数,是通过matl ...

  6. php中函数封装怎么弄,php封装函数步骤

    php封装函数步骤 下面定义一个方法,这个方法很简单,就是处理2个数的相加问题function add($number1, $number2) { $sum = $number1 $number2; ...

  7. WIN10下配置Yolov3(VS2019,GPU)+opencv训练自己的数据集(绝对详细,小白型记录)

    大二菜鸡,因为要准备一个水下识别的比赛,想到了用yolov3这个强大的框架,参考了许多大佬的博客,在这里记录一下自己的配置过程. ** 一. CUDA和CUDNN配置 ** 我的显卡的GTX1060, ...

  8. hive sql 向上取整、向下取整、保留小数位的函数

    hive sql 向上取整.向下取整.保留小数位的函数 向上取整函数:ceiling() 示例:select ceiling(10.1) 结果:11 向下取整函数:floor() 示例:select ...

  9. Windows 下 C++ 利用 OpenCV glob 函数获取文件夹下所有文件绝对路径

    绪论 本文记录 Windows 下 C++ 利用 OpenCv glob 函数得到 文件夹下所有文件的绝对路径(含文件名).本文还含有 std::string::find()等函数的记录.如果是 Py ...

最新文章

  1. Android实现下拉头部缩放功能
  2. Apache ZooKeeper - 使用源码启动ZK集群模式
  3. 弱电工程网络视频监控系统联网方式及接地要求
  4. html大学生活主题班会,“大学生活”主题班会记录范文
  5. myeclipse10中表单中的JS函数无法写return,onsubmit=return check();处出错
  6. python自动化测试框架结构_基于Python的HTTP接口自动化测试框架实现
  7. mysql必知必会学习笔记
  8. php smarty 模板注释,smarty中的注释
  9. 运维面试和笔试常见问题
  10. matlab 查看版本号,如何查看matlab版本信息?matlab版本信息怎么看
  11. NIOS_Altera EPCS下载 注意事项20210815
  12. Histromap of World History: The rise and fall of peoples and notions for 4000 years
  13. 谷歌浏览器在编辑器中打不开_如何在Google文档中使用编辑器聊天
  14. 网页抖音批量取消关注JS代码
  15. DBA所需要具备技能
  16. SVM——(三)对偶性和KKT条件(Lagrange duality and KKT condition)
  17. matlab小波神经网络,MATLAB 小波神经网络预测求助大神
  18. 在h文件中函定义+ #pragma once 是什么意思?
  19. Tech Talk · 云技术有话聊 | 关键基础部件如何保障高可靠?
  20. linux备忘录课程设计,linux备忘录

热门文章

  1. DeepMind去年亏损27亿元,同比扩大221%,谷歌说:继续烧
  2. 活动推荐 | 首届“中新人工智能高峰论坛”,与周志华、李德毅等大咖对话未来...
  3. 备库批量查询失败的原因分析
  4. linux SHELL下替代sed、ask的常用字符串处理(截取,判断、替换)
  5. 根据输入网络服务名称取得端口号
  6. mysql-5.7.17.msi安装
  7. 环保牵手大数据 佛企需反向挖掘数据价值
  8. [20160224]-bashELF command not found.txt
  9. C#(SuperWebSocket)与websocket通信
  10. Response.Write 用法总结