《学习OpenCV》课后习题解答9
来源:互联网 发布:矩阵函数的导数和积分 编辑:程序博客网 时间:2024/05/19 14:02
题目:(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); }}
0 0
- 《学习OpenCV》课后习题解答9
- 《学习OpenCV》课后习题解答1
- 《学习OpenCV》课后习题解答2
- 《学习OpenCV》课后习题解答3
- 《学习OpenCV》课后习题解答4
- 《学习OpenCV》课后习题解答5
- 《学习OpenCV》课后习题解答6
- 《学习OpenCV》课后习题解答7
- 《学习OpenCV》课后习题解答8
- 《学习OpenCV》课后习题解答(第三章)(仅供参考)
- 《学习OpenCV》课后习题解答(第四章)(仅供参考)(不断更新)
- 学习Opencv 第四章课后习题解答(Exercise 1a)
- Week 9:Anomaly Detection课后习题解答
- Week 9:Recommender Systems课后习题解答
- Week 9:Anomaly Detection课后习题解答
- Week 9:Recommender Systems课后习题解答
- 学习Opencv第3章课后习题
- 学习Opencv第2章课后习题
- Java学习笔记1
- Android获取私有存储目录
- Java千百问_07JVM架构(007)_java堆内存是什么样的
- 归并排序——java
- DWM1000DISCOVERY问题集锦
- 《学习OpenCV》课后习题解答9
- EventBus3.0使用详解
- Break and Continue
- vs2010与oracle数据库连接
- Unity3D 游戏序列化及发布
- HTML-通过点击网页上的文字弹出QQ添加好友页面
- Spark函数讲解:collectAsMap
- 杭电OJ 1010, 从非递归的DFS 到 剪枝
- 百度之星2016初赛第一场(Astar Round 2A)