Fork me on GitHub

【OpenCV学习笔记5】读取图像中任意点的像素值

读取图像中任意点的像素值

SkySeraph Apr 4th 2011  HQU

Email:zgzhaobo@gmail.com    QQ:452728574

Latest Modified Date:Apr 4th 2011 HQU

一、说明:类似于PS中的功能,鼠标放到图片中的某点即能显示其像素值

二、源码 

View Code
/*===============================================//
功能:OpenCV Utility: Reading Image Pixels Value
时间:4/4/2011 SkySeraph HQU
//===============================================
*/
#include
"iostream"
#include
"cv.h"
#include
"highgui.h"
using namespace std;

#include
"math.h"

#pragma comment(lib,"highgui.lib")
#pragma comment(lib,"cv.lib")
#pragma comment(lib,"cvaux.lib")
#pragma comment(lib,"cxcore.lib")

// 源图像
const char* filename = "D:\\My Documents\\My Pictures\\Sample\\lena.bmp";

// 隐藏Console窗口
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )


/*=============================================*/
void mouseHandler(int event, int x, int y, int flags, void* param)
{
IplImage
* img0, * img1;
img0
= (IplImage*) param;
img1
= cvCloneImage(img0);
/*-------------cvInitFont-------------------//
//功能:初始化字体结构体
//原型:void cvInitFont(
CvFont* font, //被初始化的字体结构体
int font_face,//字体名称标识符
$ CV_FONT_HERSHEY_SIMPLEX - 正常大小无衬线字体。
$ CV_FONT_HERSHEY_PLAIN - 小号无衬线字体。
$ CV_FONT_HERSHEY_DUPLEX - 正常大小无衬线字体。( 比CV_FONT_HERSHEY_SIMPLEX更复杂)
$ CV_FONT_HERSHEY_COMPLEX - 正常大小有衬线字体。
$ CV_FONT_HERSHEY_TRIPLEX - 正常大小有衬线字体 ( 比CV_FONT_HERSHEY_COMPLEX更复杂)
$ CV_FONT_HERSHEY_COMPLEX_SMALL - CV_FONT_HERSHEY_COMPLEX 的小译本。
$ CV_FONT_HERSHEY_SCRIPT_SIMPLEX - 手写风格字体。
$ CV_FONT_HERSHEY_SCRIPT_COMPLEX - 比CV_FONT_HERSHEY_SCRIPT_SIMPLEX更复杂。
//这个参数能够由一个值和可选择的CV_FONT_ITALIC字体标记合成,就是斜体字
double hscale,//字体宽度。
//如果等于1.0f,字符的宽度是最初的字体宽度。如果等于0.5f,字符的宽度是最初的字体宽度的一半
double vscale,//字体高度。
double shear=0,//字体的斜度。
//当值为0时 ,字符不倾斜;当值为1.0f时,字体倾斜≈45度,等等。厚度让字母着重显示。函数cvLine用于绘制字母
int thickness=1, //字体笔划的粗细程度
int line_type=8 //字体笔划的类型
);
//--------------------------------------------
*/
CvFont font;
uchar
* ptr;
char label[20];
cvInitFont(
&font, CV_FONT_HERSHEY_PLAIN, .8, .8, 0, 1, 8);
if (event == CV_EVENT_LBUTTONDOWN) //单击左键
{
/* read pixel */
ptr
= cvPtr2D(img1, y, x, NULL);//返回指向特殊数组元素的指针 && cvGet2D返回指向特殊数组的元素
/*display the BGR value*/
sprintf(label,
"(%d, %d, %d)", ptr[0], ptr[1], ptr[2]);
cvRectangle(
img1,
cvPoint(x, y
- 12),
cvPoint(x
+ 100, y + 4),
CV_RGB(
255, 0, 0),
CV_FILLED,
8, 0
);
cvPutText(
img1,
label,
cvPoint(x, y),
&font,
CV_RGB(
255, 255, 0)
);
cvShowImage(
"img", img1);
}
}

int main(int argc, char** argv)
{
IplImage
* img;
/* usage: <prog_name> <image> */
//if (argc != 2)
//{
// printf("Usage: %s <image>\n", argv[0]);
// return 1;
//}
/* load image */
img
= cvLoadImage(filename, 1);
/* always check */
assert(img);
/* create a window and install mouse handler */
cvNamedWindow(
"img", 1);
// 注册鼠标事件
cvSetMouseCallback("img", mouseHandler, (void*)img);
cvShowImage(
"img", img);
cvWaitKey(
0);
/* be tidy */
cvDestroyAllWindows();
cvReleaseImage(
&img);
return 0;
}

三、效果



参考:http://nashruddin.com/OpenCV_Utility_Reading_Image_Pixels_Value 



Author:         SKySeraph

Email/GTalk: zgzhaobo@gmail.com    QQ:452728574

From:         http://www.cnblogs.com/skyseraph/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,请尊重作者的

posted @ 2011-04-04 08:54  SkySeraph  阅读(9797)  评论(0编辑  收藏  举报