OpenCV 默认的颜色空间是 BGR,类似于RGB,但不是RGB。
即某个像素的第一个值是Blue的值, 第二个是Green的值,第三个是R的值。
程序的核心是 用 cvGet2D(图片, y坐标, x坐标) 获取 CvScalar 对象。
注意y,x顺序,不是 x, y。
CvScalar s = cvGet2D(img, y, x);
printf(" RGB : B=%d, G=%d, R=%d \n" , (int)s.val[0], (int)s.val[1], (int)s.val[2]);
完整程序如下。
#include <ctype.h>
#include <stdlib.h>
#include <cv.h>
#include <highgui.h>
int main(int argc, char** argv)
{
IplImage *img = 0;
IplImage *hsv = 0;
int x = 0;
int y = 0;
int error = 0;
int splitType = -1;
uchar p[3];
if (argc = 4)
{
if (!(img = cvLoadImage(argv[1])))
{
error = 1;
}
if (isdigit(argv[2][0]))
{
x = atoi(argv[2]);
}
else
{
error = 1;
}
if (isdigit (argv[3][0]))
{
y = atoi(argv[3]);
}
else
{
error = 1;
}
}
if(error)
{
printf(" Usage: getPixel [ImagePath] [x] [y]\n");
printf(" ERROR, Please check the Image Path and [x, y] coordination !!\n");
return -1;
}
// OpenCV using BGR instead of RGB
CvScalar s = cvGet2D(img, y, x);
printf(" RGB : B=%d, G=%d, R=%d \n" , (int)s.val[0], (int)s.val[1], (int)s.val[2]);
hsv = cvCreateImage (cvGetSize (img), 8, 3);
cvCvtColor(img, hsv, CV_BGR2HSV);
s = cvGet2D(hsv, y, x);
printf(" HSV : H=%.2f, S=%.2f, V=%.2f \n" , s.val[0], s.val[1], s.val[2]);
cvNamedWindow("showImg");
// Mark the area
cvCircle(img, cvPoint(x, y), 4, cvScalar(255, 0, 0), 2);
cvShowImage("showImg", img);
cvWaitKey();
cvReleaseImage(&img);
cvReleaseImage(&hsv);
return 0;
}
参数介绍
第一个参数 图片的路径
第二个参数 x 坐标
第三个参数 y坐标
使用方法:
./getPixels frame-0004.jpg 56 61
假设编译后的程序名为 getPixels,获取 frame-0004.jpg 图片的 Y坐标 56, X坐标61 的像素点的像素值