wya*_*att 5 opencv image-processing iplimage
我想直接将数据写入IplImage的imageData数组,但是我找不到很多关于它如何格式化的信息.令我特别困扰的一件事是,尽管创建了具有三个通道的图像,但每个像素有四个字节.
我用来创建图像的功能是:
IplImage *frame = cvCreateImage(cvSize(1, 1), IPL_DEPTH_8U, 3);
Run Code Online (Sandbox Code Playgroud)
根据所有迹象,这应该创建一个三通道RGB图像,但似乎并非如此.
例如,我如何将单个红色像素写入该图像?
谢谢你的帮助,这让我很难过.
如果你正在考虑,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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21116 次 |
| 最近记录: |