《学习OpenCV》课后习题解答9
题目:(P126)
创建一个程序,使其读入并显示一幅图像。当用户鼠标点击图像时,获取图像对应像素的颜色值(BGR),并在图像上点击鼠标处用文本将颜色值显示出来。
解答:
本题关键是会用cvGet2D获得BGR值,以及会用鼠标点击事件和回调函数,还有显示文本值。
#include<cv.h>
#include<highgui.h>
#include<iostream>
using namespace std;
char* str = (char*)malloc(30 * sizeof(char*));
void myMouseCallback(
int event,
int x,
int y,
int flags,
void* param
);
int main(int argc, char* argv[])
{
IplImage* img = cvLoadImage(argv[1]);
cvNamedWindow("获取图像某一点的颜色分量", 1);
cvShowImage("获取图像某一点的颜色分量", img);
while (1)
{
cvSetMouseCallback(
"获取图像某一点的颜色分量",
myMouseCallback,
(void*)img
);
if (cvWaitKey(100) == 27)
break;
}
cvReleaseImage(&img);
cvDestroyWindow("获取图像某一点的颜色分量");
return 0;
}
void myMouseCallback(
int event,
int x,
int y,
int flags,
void* param
) {
IplImage* img = (IplImage*)param;
if (event == CV_EVENT_LBUTTONDOWN)
{
CvScalar s;
s = cvGet2D(img, x, y);//返回(x,y)的RGB值
CvFont cvf;
cvInitFont(&cvf, CV_FONT_HERSHEY_PLAIN, 1, 1, 0, 1, 8);
double r = s.val[0];
double g = s.val[1];
double b = s.val[2];
memset(str, 0, 30);
sprintf(str, "B:%.0f,G:%.0f,R:%.0f", b, g, r);
cout << "B:" << b << ",G:" << g << ",R:" << r << endl;
cvPutText(img,
str,
cvPoint(x, y),
&cvf,
cvScalar(255, 0, 0)
);
cvShowImage("获取图像某一点的颜色分量", img);
}
}
《学习OpenCV》课后习题解答9的更多相关文章
- 機器學習基石(Machine Learning Foundations) 机器学习基石 作业三 课后习题解答
今天和大家分享coursera-NTU-機器學習基石(Machine Learning Foundations)-作业三的习题解答.笔者在做这些题目时遇到非常多困难,当我在网上寻找答案时却找不到,而林 ...
- 《学习OpenCV》课后习题解答8
题目:(P126) 本章完整讲述了基本的输入/输出编程以及OpenCV的数据结构.下面的练习是基于前面的知识做一些应用,为后面大程序的实现提供帮助. a.创建一个程序实现以下功能:(1)从视频文件中读 ...
- 《学习OpenCV》课后习题解答6
题目:(P104) 使用cvCmp()创建一个掩码.加载一个真实的图像.使用cvsplit()将图像分割成红,绿,蓝三个单通道图像. a.找到并显示绿图. b.克隆这个绿图两次(分别命名为clone1 ...
- 《学习OpenCV》课后习题解答5
题目:(P104) 为一个图像创建多个图像头.读取一个大小至少为100*100的图像.另创建两个图像头并设置它们的origion,depth,nChannels和widthStep属性同之前读取的图像 ...
- 《学习OpenCV》课后习题解答4
题目:(P104) 练习使用感兴趣区域(ROI).创建一个210*210的单通道图像并将其归0.在图像中使用ROI和cvSet()建立一个增长如金字塔状的数组.也就是:外部边界为0,下一个内部边界应该 ...
- 《学习OpenCV》课后习题解答3
题目:(P104) 创建一个大小为100*100的三通道RGB图像.将它的元素全部置0.使用指针算法以(20,5)与(40,20)为项点绘制一个绿色平面. 解答: #include "cv. ...
- 《学习OpenCV》课后习题解答2
题目:(P104) 创建一个拥有三个通道的二维字节类型矩阵,大小为100*100,并将所有值赋为0.通过函数cvPtr2D将指针指向中间的通道("绿色").以(20,5)与(40, ...
- 《学习OpenCV》课后习题解答7
题目:(P105) 创建一个结构,结构中包含一个整数,一个CvPoint和一个 CvRect:称结构体为"my_struct". a. 写两个函数:void Write_my_st ...
- 《学习OpenCV》课后习题解答1
题目:(P104) 下面这个练习是帮助掌握矩阵类型.创造一个三通道二维矩阵,字节类型,大小为100*100,并设置所有数值为0. a.在矩阵中使用cvCircle( CvArr* img, CvPoi ...
随机推荐
- React中需要多个倒计时的问题
最近有一个需求是做一个闪购列表,列表中每一个商品都有倒计时,如果每一个倒计时都去生成一个setTimeout的话,一个页面就会有很多定时器,感觉这种做法不是非常好,于是换了一个思路. 思路是这样的,一 ...
- 随便说说Promise
为啥要说 promise ? 因为这是前端必须要掌握的一个知识,吹逼必备 首先说说 Promise 是什么? Promise 是JavaScript的第一个异步标准模型,一个包含传递信息与状态的对象, ...
- 『ACM C++』Virtual Judge | 两道基础题 - The Architect Omar && Malek and Summer Semester
这几天一直在宿舍跑PY模型,学校的ACM寒假集训我也没去成,来学校的时候已经18号了,突然加进去也就上一天然后排位赛了,没学什么就去打怕是要被虐成渣,今天开学前一天,看到最后有一场大的排位赛,就上去试 ...
- BZOJ1569: [JSOI2008]Blue Mary的职员分配(dp 暴力)
Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 483 Solved: 189[Submit][Status][Discuss] Descriptio ...
- mysql数据库和数据表的简单操作
一.数据库的增删改查 1.新建数据库 CREATE DATABASE 数据库名 charset utf8; 数据库名规则:可以由字母.数字.下划线.@.#.$ 区分大小写, 不能使用关键字如 crea ...
- Laravel-初步使用
一.Laravel环境搭建 1.window环境下环境搭建请参考以下链接: 开发环境搭建 - Windows | <Laravel 开发环境部署> | PHP / Laravel 社区文档 ...
- ruby Encoding
一. 查看ruby支持的编码 Encoding.name_list 二. 搜索编码 Encoding.find('US-ASCII') #=> US-ASCII,不存在则抛出异常 三. __EN ...
- IO复用——epoll系列系统调用
1.内核事件表 epoll是Linux特有的I/O复用函数.epoll把用户关心的文件描述上的事件放在内核里的一个事件表中,并用一个额外的文件描述符来标识该内核事件表.这个额外文件描述符使用函数epo ...
- [HDU1512]Monkey King(左偏树)
用并查集维护猴子们的关系,强壮值用左偏树维护就行了 Code #include <cstdio> #include <algorithm> #include <cstri ...
- Spring MVC怎么统一异常管理?
1. 在类上加上@ControllerAdvice注解 2. 在方法上加上@ExceptionHandler注解 @ExceptionHandler(Exception.class) @Respons ...