题目:(P104)

使用cvCmp()创建一个掩码。加载一个真实的图像。使用cvsplit()将图像分割成红,绿,蓝三个单通道图像。

a.找到并显示绿图。

b.克隆这个绿图两次(分别命名为clone1和clone2)。

c.求出这个绿色平面的最大值和最小值。

d.将clone1的所有元素赋值为theash=(unsigned char)((最大值-最小值)/2.0)。

e.将clone2的所有元素复制为0,然后调用函数cvCmp(green_image,clone1,clone2,CV_CMP_GE)。现在clone2将是一个标识绿图中值超过thresh的掩码图像。

f.最后,使用cvSubS(green_image,thresh/2,green_image,clone2)函数并显示结果。

解答:

#include <cv.h>
#include <highgui.h> int main(int argc, const char** argv)
{
IplImage* srcImg = cvLoadImage(argv[1]); //load the image if (!srcImg)
{
printf("cannot open the file...\n");
return -1;
}
IplImage* rImg = cvCreateImage(cvGetSize(srcImg), srcImg->depth, 1);
IplImage* gImg = cvCreateImage(cvGetSize(srcImg), srcImg->depth, 1);
IplImage* bImg = cvCreateImage(cvGetSize(srcImg), srcImg->depth, 1); //创建单通道r,g,b图像
IplImage* clone1 = cvCreateImage(cvGetSize(srcImg), srcImg->depth, 1);
IplImage* clone2 = cvCreateImage(cvGetSize(srcImg), srcImg->depth, 1);
double green_maxPixel = 0;
double green_minPixel = 0; //绿色平面最大最小值
double thresh; //阈值thresh
cvSplit(srcImg, rImg, gImg, bImg, 0); //拆分3通道
//-------------------a小题 ------------------
cvNamedWindow("GreenImage0");
cvShowImage("GreenImage0", gImg);
//-------------------b小题---------------------
cvCopy(gImg, clone1);
cvCopy(gImg, clone2); //copy the gImg to clone1 and clone2
//-----------------c小题求绿色平面最大最小值-----------------
cvMinMaxLoc(gImg, &green_maxPixel, &green_minPixel);
//-------------------d小题-------------------------------
thresh = (unsigned char)(green_maxPixel - green_minPixel) / 2.0;
cvSet(clone1, cvScalar(thresh));
//----------------------e小题-----------------------
cvZero(clone2);
cvCmp(gImg, clone1, clone2, CV_CMP_GE);
//---------------------------f小题-------------------
cvSubS(gImg, cvScalar(thresh / 2), gImg, clone2);
cvNamedWindow("GreenImage1");
cvShowImage("GreenImage1", gImg);
cvWaitKey(0);
cvReleaseImage(&srcImg);
cvReleaseImage(&rImg);
cvReleaseImage(&gImg);
cvReleaseImage(&bImg);
cvDestroyWindow("GreenImage0");
cvDestroyWindow("GreenImage1");
return 0;
}

《学习OpenCV》课后习题解答6的更多相关文章

  1. 機器學習基石(Machine Learning Foundations) 机器学习基石 作业三 课后习题解答

    今天和大家分享coursera-NTU-機器學習基石(Machine Learning Foundations)-作业三的习题解答.笔者在做这些题目时遇到非常多困难,当我在网上寻找答案时却找不到,而林 ...

  2. 《学习OpenCV》课后习题解答8

    题目:(P126) 本章完整讲述了基本的输入/输出编程以及OpenCV的数据结构.下面的练习是基于前面的知识做一些应用,为后面大程序的实现提供帮助. a.创建一个程序实现以下功能:(1)从视频文件中读 ...

  3. 《学习OpenCV》课后习题解答5

    题目:(P104) 为一个图像创建多个图像头.读取一个大小至少为100*100的图像.另创建两个图像头并设置它们的origion,depth,nChannels和widthStep属性同之前读取的图像 ...

  4. 《学习OpenCV》课后习题解答4

    题目:(P104) 练习使用感兴趣区域(ROI).创建一个210*210的单通道图像并将其归0.在图像中使用ROI和cvSet()建立一个增长如金字塔状的数组.也就是:外部边界为0,下一个内部边界应该 ...

  5. 《学习OpenCV》课后习题解答3

    题目:(P104) 创建一个大小为100*100的三通道RGB图像.将它的元素全部置0.使用指针算法以(20,5)与(40,20)为项点绘制一个绿色平面. 解答: #include "cv. ...

  6. 《学习OpenCV》课后习题解答2

    题目:(P104) 创建一个拥有三个通道的二维字节类型矩阵,大小为100*100,并将所有值赋为0.通过函数cvPtr2D将指针指向中间的通道("绿色").以(20,5)与(40, ...

  7. 《学习OpenCV》课后习题解答9

    题目:(P126) 创建一个程序,使其读入并显示一幅图像.当用户鼠标点击图像时,获取图像对应像素的颜色值(BGR),并在图像上点击鼠标处用文本将颜色值显示出来. 解答: 本题关键是会用cvGet2D获 ...

  8. 《学习OpenCV》课后习题解答7

    题目:(P105) 创建一个结构,结构中包含一个整数,一个CvPoint和一个 CvRect:称结构体为"my_struct". a. 写两个函数:void Write_my_st ...

  9. 《学习OpenCV》课后习题解答1

    题目:(P104) 下面这个练习是帮助掌握矩阵类型.创造一个三通道二维矩阵,字节类型,大小为100*100,并设置所有数值为0. a.在矩阵中使用cvCircle( CvArr* img, CvPoi ...

随机推荐

  1. git找回本地误删的文件或文件夹

    一:首先,我们先用git status 看看工作区的变化 application/Admin/Conf/config.php 如果要恢复文件记住这个 application 如果要恢复文件夹记住这个工 ...

  2. day 19 反射

    1.isinstance, type, issubclass 的含义 isinstance:  判断你给对象时候是xxx类型的.(向上判断) type: 返回xxx对象的数据类型 issubclass ...

  3. ArrayList的源码分析(基于jdk1.8)

    1.初始化 transient Object[] elementData; //实际存储元素的数组 private static final Object[] DEFAULTCAPACITY_EMPT ...

  4. go内建容器-字符和字符串操作

    1.基础定义 在基础语法篇提到过golang的rune相当于其他编程语言的char,其本质是一个int32(四字节),用[]rune来转换一个字符串时,得到的是个解码后的结果,存储在新开辟的[]run ...

  5. epoll 服务端 ET模式

    windows下IOCP, linux下 epoll. epoll模型其实也是一个同步模型,ET是epoll里面的一种模式,叫 边缘触发. 个人理解,类似于 windows下的事件选择模型.代码如下: ...

  6. 青岛Uber优步司机奖励政策(1月4日~1月10日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  7. JavaScript事件及BOM和DOM

    1. 事件 1.1 事件绑定 # 写在html元素中<button onclick="code..."></div>​# 把事件当做元素对象的方法btnEl ...

  8. JAVA日志框架概述

            日志用来记录应用的运行状态以及一些关键业务信息,其重要性不言而喻,通常我们借助于现有的日志框架完成日志输出.目前开源的日志框架很多,常见的有log4j.logback等,有时候我们还会 ...

  9. git服务器搭建及eclipse使用git

    一.搭建git服务器 1.yum install git 2.新建用户linux用户git,管理git服务 useradd git passwd git 3.初始化git仓库 git init --b ...

  10. 第三模块:面向对象&网络编程基础 第1章 面向对象

    我的失败与梦想(一) 我的失败与梦想之为何创办路飞学城 01-编程范式 02-面向过程编程 03-面向对象编程介绍 04-定义类与实例化出对象 05-如何使用类 06-如何使用对象 07-属性查找与绑 ...