p163_5和p163_6代码如下:

#include <opencv/cv.h>
#include <opencv/highgui.h>/**********************************************
// 函数cvCount:统计二值图像image中像素值为value的数量
**********************************************/
int cvCount(IplImage *image, uchar value)
{if(image == NULL || image->nChannels != 1)return 0;int cnt = 0;uchar *ptr = (uchar *)image->imageData;// 遍历图像中给定像素值的像素点的个数for(int i = 0; i<image->height; i++)for(int j = 0; j<image->width; j++)if( *(ptr + i*image->widthStep + j) == value)cnt++;return cnt;
}int main(int argc, char *argv[])
{char src_1[] = "src1.bmp";char src_2[] = "src2.bmp";IplImage *src1 = cvLoadImage(src_1, CV_LOAD_IMAGE_GRAYSCALE);IplImage *src2 = cvLoadImage(src_2, CV_LOAD_IMAGE_GRAYSCALE);if(!src1 || !src2){cvNamedWindow("ERROR", CV_WINDOW_AUTOSIZE);cvWaitKey(0);return 0;}IplImage *diff12 = cvCreateImage(cvGetSize(src1), src1->depth, src1->nChannels);cvSub(src2, src1, diff12, NULL);cvAbs(diff12, diff12);cvThreshold(diff12, diff12, 40, 255, CV_THRESH_BINARY);// 超多阀值的设为255;cvNamedWindow("p163_5_1", 0);cvShowImage("p163_5_1", diff12);IplImage *temp = cvCreateImage(cvGetSize(diff12), diff12->depth, 1);temp->origin = diff12->origin;cvMorphologyEx(diff12, diff12, temp, NULL, CV_MOP_OPEN, 1);uchar *ptr = (uchar *)diff12->imageData;int i, j;int oldcnt = 0;int newcnt = 0;  // 用于保存新旧区域像素的数量(即面积)CvPoint oldpos = cvPoint(0, 0); // 记录旧的连通区域的起始位置for(i = 0; i<diff12->height; i++)for(j = 0; j<diff12->width; j++)if(255 == *(ptr+i*diff12->widthStep+j)){cvFloodFill(diff12, cvPoint(j, i), cvScalar(100));// 漫水填充为100,因为是单通道,不必cvScalar(100,100,100)newcnt = cvCount(diff12,100) - oldcnt;if(oldcnt < newcnt){cvFloodFill(diff12, oldpos, cvScalar(0));   // 旧区域填充为0oldcnt = newcnt;        // 更新连通区域面积oldpos = cvPoint(j, i); // 记录连通区域的位置
                }elsecvFloodFill(diff12, cvPoint(j, i), cvScalar(0));// 填充0
            }cvFloodFill(diff12, oldpos, cvScalar(255));// 将最大的连通区域填充为255cvSaveImage("fill.bmp", diff12, 0);cvNamedWindow("p163_5", 0);cvShowImage("p163_5", diff12);cvWaitKey(0);cvReleaseImage(&src1);cvReleaseImage(&src2);cvReleaseImage(&diff12);cvDestroyWindow("p163_5");return 1;
}

p163_7代码:

#include <opencv/cv.h>
#include <opencv/highgui.h>int main(int argc, char *argv[])
{char src[] = "fill.bmp";char src2[] = "src2.bmp";IplImage *module = cvLoadImage(src, CV_LOAD_IMAGE_GRAYSCALE);IplImage *img = cvLoadImage(src2, CV_LOAD_IMAGE_COLOR);if(!module || !img){cvNamedWindow("ERROR", CV_WINDOW_AUTOSIZE);cvWaitKey(0);return 0;}IplImage *cup = cvCreateImage(cvGetSize(img), img->depth, img->nChannels);cvCopy(img, cup, module);cvNamedWindow("p126_7", 0);cvShowImage("p126_7", cup);cvWaitKey(0);cvReleaseImage(&module);cvReleaseImage(&img);cvReleaseImage(&cup);cvDestroyWindow("p126_7");return 1;
}

p163_8

#include <opencv/cv.h>
#include <opencv/highgui.h>// 生成一个有较小方差的随机图像
int main(int argc, char *argv[])
{IplImage *img = cvCreateImage(cvSize(320,480), IPL_DEPTH_8U, 1);CvRNG rng = cvRNG(cvGetTickCount());uchar *ptr = (uchar *)img->imageData;for(int i = 0; i<img->height; i++)for(int j = 0; j<img->width; j++)*(ptr + i*img->widthStep + j) = cvRandInt(&rng) % 255;// 为求得明显效果,这里为0~255之间的随机数(题目中为3)
cvNamedWindow("p163_8", 0);cvShowImage("p163_8", img);cvWaitKey(0);return 1;
}/*
int main(int argc, char *argv[])
{CvRNG rng = cvRNG(cvGetTickCount());printf("%d%d", int(rng/65536),int(rng%65536));for(int i=0; i<10; i++){printf("%d\n", cvRandInt(&rng)%100);printf("%.2f\n", cvRandReal(&rng));}return 1;
}
*/

解释:
cvRNG()返回一个CvRNG结构,cvRandInt和cvRandReal使用。使用时赋给它一个64位长整数种子。而如果使用相同的种子,每次程序运行,后面的函数会出现一样的随机数。所以,将 cvGetTickCount返回系统时间计数值来得到种子,防止随机数重复。

http://blog.sina.com.cn/s/blog_79496d6b0100wjp5.html

cvRandInt()返回均匀分布32位的随机数,均匀分布为统计学上的专有名词,表示长时间下所有数字出现的概率都是一样的,而cvRandint()在opencv里使用的公式
temp = (uint64)(unsigned)temp*1554115554 + (temp >> 32);
这个公式的名称叫Multiply-with-carry (MWC) generator,有兴趣的话可以在网络上找“随机数产生器”,Multiply-with-carry是将64位的种子去产生32位的随机数。
unsigned cvRandInt(CvRNG资料结构)

cvRandReal()返回均匀分布,0~1之间的随机小数,cvRandReal()的公式则是用
cvRandInt(rng)*2.3283064365386962890625e-10
的方法,其实就是cvRandInt(rng)*2^(-32),也就是将cvRandInt()随机出来的结果(32位除以2的三十二次方,因此,出现的结果将会是0~1之间的小数,也就是随机0~1之间。
double cvRandReal(CvRNG资料结构)

转载于:https://www.cnblogs.com/suwen/archive/2013/03/24/2978421.html

OpenCV第五章练习p163_5~8相关推荐

  1. 《学习Opencv》第五章 习题6

    这是第五章 习题5.6的结合版,其中实现了摄像头抓拍功能,能够成功运行. #include "stdafx.h" #include "cv.h" #includ ...

  2. 数字图像处理——第五章 图像复原与重建

    数字图像处理--第五章 图像复原与重建 文章目录 数字图像处理--第五章 图像复原与重建 写在前面 1 图像退化/复原过程的模型 2 噪声模型 2.1 高斯噪声 2.2 椒盐噪声 3 仅有噪声的复原- ...

  3. MFC与Matlab编程总结 (以《Matlab与C/C++混合编程技术(第三版)》-刘维 第五章 生成DLL为例)

    近期要完成一个任务,把人脸超分辨率的算法集成在一个系统中,嵌入人脸库及字典集等.老板的要求是有比较好的界面,目前也只能是VS那一套了,前一段时间完成的项目是用的MFC,这次也就是用MFC来完成吧.但是 ...

  4. 数字图像处理 第五章图像复原与重建

    文章目录 数字图像处理 第五章 图像复原与重建 引言 5.1背景知识 5.2图像退化与复原 5.3噪声模型 高斯噪声 椒盐噪声 瑞丽噪声 伽马噪声 5.4只存在噪声的复原--空间滤波 均值滤波 统计排 ...

  5. 第五章 采用SVM和神经网络的车牌识别

    [原文:http://blog.csdn.net/raby_gyl/article/details/11617875] 书名:<Mastering OpenCV with Practical C ...

  6. 王道考研 计算机网络笔记 第五章:传输层

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 第二章:王道考研 计算机网络笔记 第 ...

  7. c语言逐步搜索法求有根区间,[C语言第五章.ppt

    [C语言第五章 算法举例 基本思想是,根据提出的问题,列举所有可能的情况,并 用问题中给定的条件检验哪些是需要的,哪些是不需要的. 教学进程 列举与试探 列举法常用于解决"是否存在" ...

  8. 2018-4-8蚁群算法---包子阳《智能优化算法以及Matlab实现》第五章

    资料来源: <智能优化算法以及matlab实现>包子阳  余继周 编著 第五章-----蚁群算法 是一种元启发式优化算法(自己理解:就是作为群体的单位个体也就是元,在里面充当着随机的选择搜 ...

  9. Linux内核分析——第五章 系统调用

    第五章 系统调用 5.1 与内核通信 1.系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层主要作用有三个: (1)为用户空间提供了一种硬件的抽象接口 (2)系统调用保证了系统的稳定和安全 ( ...

最新文章

  1. Linux(11)-Linux系统下用户权限管理
  2. 如何更规范化编写 Java 代码
  3. Linux--用SecureCRT来上传和下载文件
  4. php 三种传递函数,php – 是否可以将传递函数传递给包含的文件?
  5. Orcle 版本、数据库名查询
  6. Webrtc之源码结构
  7. 爬虫是后端吗_北京市互联网后端职位招聘需求分析
  8. Javascript多线程引擎(二)
  9. android ndk makefile,用Android NDK打造自己的toolchain(使用C/C++默认的Makefile)
  10. 人工智能的不可解释性
  11. 初见安~这里是樱狸的博客目录~
  12. 第十五篇,STM32的SPI串行通信协议
  13. 人工智能NLP在金融领域的发展趋势和实践经验
  14. APP隐私合规检测工具Camille环境搭建
  15. 商城管理系统项目(前台+后台+管理员+用户+html+jsp)
  16. pandas中访问使用多个索引的Series
  17. 新版ECharts实现“暂无数据”的完美解决方案
  18. 如何让内容运营渗透产品,带动产品高速成长
  19. 八年级上学期计算机教学计划,八年级上学期劳技教学计划
  20. 今天我教大家用js制作一个简单的计算器

热门文章

  1. 高中数学公式总结:解析几何(非常全)
  2. [Share]17个免费下载电子书的网站
  3. 自动化测试平台化[v1.0.0][Django模型]
  4. 怎么预防过敏性鼻炎呢?
  5. Adobe安装程序无法初始化的解决方案
  6. Shodan搜索引擎使用技巧
  7. 【python初级】创建一块纯色画布
  8. 使用scrapy框架爬取斗鱼图片
  9. AI创业哪家强?6大选择给你方向!
  10. 港股开盘价是如何产生的