【问题标题】:Printing pixel values to screen from an opencv image从opencv图像将像素值打印到屏幕
【发布时间】:2012-01-23 22:43:42
【问题描述】:

我一直尝试在 C 中使用 OpenCV 中的 printf 将像素值打印到屏幕上,但我得到的只是垃圾值。如何将 IPL_DEPTH_8U(8 位无符号整数)图像打印到屏幕和 IPL_DEPTH_32F(32 位浮点)图像打印到屏幕?贝娄是我正在使用的代码。这是错的吗?这可能是正确的,但我只是得到了我没有预料到的像素值:

顺便说一句,这些是单通道图像:

for (y = 0; y < img->height; y++){
   uchar *ptr = (uchar*)(img->imageData + y * img->widthStep);
   for (x = 0; x < img->width; x++){
       printf("%u, ", ptr[x]);
   }
   printf("\n");
}

这适用于 IPL_DEPTH_8U 图像,我怀疑它工作正常。对于 32 个浮动图像,我将指针更改为 float *,并将 printf 中的说明符更改为 '%f',但这似乎不起作用。怎么了?

这些是正确的指针和说明符吗?另外,对于 16 位有符号整数和 32 位有符号浮点数,指针和说明符应该是什么?

谢谢。我刚开始使用这个网站,你们太棒了!

【问题讨论】:

标签: c opencv


【解决方案1】:

你可以用cvGet2D()做:

CvScalar val = cvGet2D(img, y, x);

您必须从CvScalar 中提取要打印的值。既然基本是double[4],我觉得不会有问题。

【讨论】:

    【解决方案2】:

    查看this OpenCV 常见问题解答。特别是看“如何访问矩阵元素?”部分。

    这是我为正确打印 float IplImage 结构而编写的一个小示例:

    void fillIplImage(IplImage* srcdst)
    {
        for(int row = 0; row < srcdst->height; row++)
        {
            for(int col = 0; col < srcdst->width; col++)
            {
                ((float*)(srcdst->imageData + srcdst->widthStep*row))[col] = (float)col;
            }
        }
    }
    
    void printIplImage(const IplImage* src)
    {
        for(int row = 0; row < src->height; row++)
        {
            for(int col = 0; col < src->width; col++)
            {
                printf("%f, ", ((float*)(src->imageData + src->widthStep*row))[col]);
            }
            printf("\n");
        }
    }
    
    int main(int argc, char** argv)
    {
        CvSize sz = {10, 10};
        IplImage* test = cvCreateImage(sz, IPL_DEPTH_32F, 1);
    
        fillIplImage(test);
        printIplImage(test);
    
        cvReleaseImage(&test);
        return 0;
    }
    

    还有一个CV_MAT_ELEM( matrix, elemtype, row, col ) 宏只适用于单通道图像,但它本质上是所有指针算法的简写。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-16
      • 2013-06-12
      • 2022-11-26
      • 2011-08-04
      • 2014-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多