画像ピクセルへのアクセス方法
(座標は0から始まり、画像原点に対する位置.画像原点または左上隅(img->origin=IPL_ORIGIN_TL)または左下隅(img->origin=IPL_ORIGIN_BL))偽8-bit 1-チャンネルの画像I(IplImage*img): 偽8-bit 3-チャンネルの画像I(IplImage*img):
例えば、点(100100)の輝度を30増加させると、以下のようにすることができる.
またはより効率的に:ダミー32-bit浮動小数点数、1-チャネル画像I(IplImage*img): 現在、一般的な場合、N-チャネルがあると仮定し、タイプTの画像:
マクロCV_を使用できますIMAGE_ELEM( image_header, elemtype, y, x_Nc )
共有先:
I(x,y) ~ ((uchar*)(img->imageData + img->widthStep*y))[x]
I(x,y)blue ~ ((uchar*)(img->imageData + img->widthStep*y))[x*3]
I(x,y)green ~ ((uchar*)(img->imageData + img->widthStep*y))[x*3+1]
I(x,y)red ~ ((uchar*)(img->imageData + img->widthStep*y))[x*3+2]
例えば、点(100100)の輝度を30増加させると、以下のようにすることができる.
CvPoint pt = {100,100};
((uchar*)(img->imageData + img->widthStep*pt.y))[pt.x*3] += 30;
((uchar*)(img->imageData + img->widthStep*pt.y))[pt.x*3+1] += 30;
((uchar*)(img->imageData + img->widthStep*pt.y))[pt.x*3+2] += 30;
またはより効率的に:
CvPoint pt = {100,100};
uchar* temp_ptr = &((uchar*)(img->imageData + img->widthStep*pt.y))[pt.x*3];
temp_ptr[0] += 30;
temp_ptr[1] += 30;
temp_ptr[2] += 30;
I(x,y) ~ ((float*)(img->imageData + img->widthStep*y))[x]
I(x,y)c ~ ((T*)(img->imageData + img->widthStep*y))[x*N + c]
マクロCV_を使用できますIMAGE_ELEM( image_header, elemtype, y, x_Nc )
I(x,y)c ~ CV_IMAGE_ELEM( img, T, y, x*N + c )
共有先: