當前位置:編程學習大全網 - 源碼下載 - 怎麽用opencv獲取圖像灰度值(用C語言)?

怎麽用opencv獲取圖像灰度值(用C語言)?

1、可以變成灰度圖也可以不變。這裏假設妳的圖像都是IPL_DEPTH_8U類型。

2、如果變成灰度圖,就是單通道圖像,獲取的就是每壹個像素點的灰度值。

IplImage* img = cvLoadImage("test.bmp", 0);

for (int i = 0; i < img->height; i++)

{

for (int j = 0; j < img->width; j++)

{

//方法壹:使用cvGet2D()函數間接訪問

CvScalar s = cvGet2D(img, i, j); //其中i代表y軸(第i行),即height;j代表x軸(第j列),即width。

printf("gray value=%f\n",s.val[0]);

//方法二:使用直接訪問

uchar val = ((uchar *)(img->imageData + i*img->widthStep))[j]; //i和j的意義同上

printf("gray value=%d\n",val);

}

}

3、如果不變成灰度圖,就是3通道圖像,獲取的就是每壹個像素點的BGR值,然後分別獲取B值,G值和R值。

IplImage* img = cvLoadImage("test.bmp", 1);

for (int i = 0; i < img->height; i++)

{

for (int j = 0; j < img->width; j++)

{

//方法壹:使用cvGet2D()函數間接訪問

CvScalar s=cvGet2D(img,i,j); //其中i代表y軸(第i行),即height;j代表x軸(第j列),即width。

printf("B=%f, G=%f, R=%f\n",s.val[0],s.val[1],s.val[2]); //註意是BGR順序

//方法二:使用直接訪問

int bVal = ((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 0]; // B

int gVal = ((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 1]; // G

int rVal = ((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 2]; // R

printf("B=%d, G=%d, R=%d\n",bVal,gVal,rVal); //註意是BGR順序

}

}

  • 上一篇:浪客劍心的目錄是什麽?
  • 下一篇:超級催淚感人的泰國愛情電影推薦
  • copyright 2024編程學習大全網