1. 程式人生 > >OpenCV提取某個特定點的畫素值

OpenCV提取某個特定點的畫素值

OpenCV 預設的顏色空間是 BGR,類似於RGB,但不是RGB。

即某個畫素的第一個值是Blue的值, 第二個是Green的值,第三個是R的值。

程式的核心是 用 cvGet2D(圖片, y座標, x座標)    獲取 CvScalar 物件。

注意y,x順序,不是 x, y。

然後輸出 CvScalar物件的 val[0],  val[1],  val[2]

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 的畫素點的畫素值