首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在写入IplImage imageData

正在写入IplImage imageData
EN

Stack Overflow用户
提问于 2011-08-01 21:37:00
回答 3查看 21.8K关注 0票数 6

我想将数据直接写入到IplImage的imageData数组中,但是我找不到很多关于它是如何格式化的信息。特别困扰我的一件事是,尽管创建了一个具有三个通道的图像,但每个像素都有四个字节。

我用来创建图像的函数是:

代码语言:javascript
复制
IplImage *frame = cvCreateImage(cvSize(1, 1), IPL_DEPTH_8U, 3);

根据所有的指示,这应该创建一个三通道RGB图像,但似乎不是这样的。

例如,我如何将单个红色像素写入该图像?

谢谢你的帮助,我被难住了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-02 00:58:53

如果您正在查看frame->imageSize,请记住它是frame->height * frame->widthStep,而不是frame->height * frame->width

BGR是OpenCV的原生格式,而不是RGB。

另外,如果你刚刚开始,你应该考虑使用C++接口( Mat取代了IplImage),因为这是未来的发展方向,而且使用起来要容易得多。

下面是一些直接访问像素数据的示例代码:

代码语言:javascript
复制
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;
}
票数 8
EN

Stack Overflow用户

发布于 2011-08-01 21:53:12

unsigned char* imageData = r1,g1,b1,r2,g2,b2,...,rN,bn,gn;// n=图像帧的高度*宽度-> imageData =imageData。

将高度为N、宽度为M的维数组的图像排列成长度为N*M的行向量。对于IPL_DEPTH_8U图像,将其设置为unsigned char*类型。

票数 0
EN

Stack Overflow用户

发布于 2012-12-20 21:01:25

直接回答你的问题,把像素涂成红色:

代码语言:javascript
复制
IplImage *frame = cvCreateImage(cvSize(1, 1), IPL_DEPTH_8U, 3);
int y,x;
x=0;y=0; //Pixel coordinates. Use this for bigger images than a single pixel.
int C=2; //0 for blue, 1 for green and 2 for red (BGR is the default format).
frame->imageData[y*frame->widthStep+3*x+C]=(uchar)255;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6899218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档