如果您正在查看frame->imageSize
請記住它是frame->height * frame->widthStep
而不是frame->height * frame->width
。
BGR是OpenCV的原生格式,而不是RGB。另外,如果你剛剛開始,你應該考慮使用C++接口(Mat替換IplImage),因爲這是未來的方向,並且使用起來更容易。
下面是直接訪問像素數據的一些示例代碼:
int main (int argc, const char * argv[]) {
IplImage *frame = cvCreateImage(cvSize(41, 41), IPL_DEPTH_8U, 3);
for(int y=0; y<frame->height; y++) {
uchar* ptr = (uchar*) (frame->imageData + y * frame->widthStep);
for(int x=0; x<frame->width; x++) {
ptr[3*x+2] = 255; //Set red to max (BGR format)
}
}
cvNamedWindow("window", CV_WINDOW_AUTOSIZE);
cvShowImage("window", frame);
cvWaitKey(0);
cvReleaseImage(&frame);
cvDestroyWindow("window");
return 0;
}
http://stackoverflow.com/questions/6868723/get -ggb-pixels-from-input-image-and-reconstruct -a-output-image-in-opencv/6875991#6875991 – karlphillip
這個答案假定實際上每個像素會有三個比特。我已經確認我的圖像的nChannels是3,但每個像素仍然有4位。對於它的價值,它們實際上並未與像素分組。它們似乎被存儲在每一行的末尾,全部設置爲0. – wyatt