【问题标题】:How to print R, G and B matrices [closed]如何打印 R、G 和 B 矩阵 [关闭]
【发布时间】:2013-03-04 16:36:37
【问题描述】:

我有以下代码,我的频道数是 3

IplImage* img_crop_mat = cvLoadImage("....", 1);
...
int b = 0;
uchar* rgb = (uchar*) img_crop_mat->imageData;

我想将RGB 矩阵放在一个循环中,浏览整个图像:

for (int y = b; y < height - b; y++)
{    
    ???
    for (int x = b; x < width - b; x++)
    {
        ????
    }
}

以前关于我的问题的论坛处理的是 CvMat,但没有将指针作为我的代码。

我必须考虑哪些索引?

【问题讨论】:

  • 您能描述一下您希望如何格式化输出吗?对我来说,这将是printf("r=%d,g=%d,b=%d" ... )cout &lt;&lt; "r=" &lt;&lt; ... 的简单案例。
  • 看看 cvSplit() 和 cvMerge()

标签: c++ visual-studio-2010 qt opencv


【解决方案1】:

您可以使用以下宏访问 3 通道、8U 图像的任意像素:

CV_IMAGE_ELEM(myImage, unsigned char, y, x*3 + ChannelOfInterest)

这是一个左值,因此您可以获取并使用它的值,也可以更改像素的值。

默认情况下,

ChannelOfInterest = 0, blue
ChannelOfInterest = 1, green
ChannelOfInterest = 2, red

实际的数据结构很简单,查一下CV_IMAGE_ELEM的定义。

【讨论】:

  • 我会认为这是非常低效的,因为它会一次获取一个字节,并且有一些显着的开销?
  • 根据我的经验,此操作所需的 CPU 时间一直是无关紧要的。我遇到的与此操作相关的最常见算法问题来自操作的复杂性和不必要的重复。
  • @Mats:其实我会在一个界面中设置一个 LineEdit 的文本,来一一显示这些矩阵的不同值(R、G 和 B)。总的来说,我将有 3 个 LineEdits 来显示三个矩阵。而且我不会使用 Cout 和 print。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多