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

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

SkySeraph Apr 4th 2011  HQU

Email:zgzhaobo@gmail.com    QQ:452728574

Latest Modified Date:Apr 4th 2011 HQU

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

二、源码 

ContractedBlock.gif ExpandedBlockStart.gif 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 ;
}

三、效果

2011040408531796.jpg

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



Author:         SKySeraph

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值