【问题标题】:window operation by Pointer of image图像指针的窗口操作
【发布时间】:2016-07-09 07:14:20
【问题描述】:

如果我们通过使用 Mat Image 的 stepdata 的指针访问像素。见下面的例子

int step = srcimg.step; 
for (int j = 0; j < srcimg.rows; j++) {
    for (int i = 0; i < srcimg.cols; i++) {

         //this is pointer to the pixel value. 
         uchar* ptr = srcimg.data + step* j + i;
    }
}

问题: 我们如何通过指针对图像进行 3x3 加权平均操作? 谢谢

【问题讨论】:

  • 我在这里发布了一个模糊滤镜示例:link。修改我的代码示例以执行 3x3 加权平均应该很简单。

标签: c++ opencv image-processing


【解决方案1】:

你不能在 opencv 中使用数据字段,因为内存并不总是连续的。您可以使用 isContinuous() 方法检查这一点。

现在你可以这样做(图像类型为 CV_8UC1)

for (int i = 1; i < srcimg.rows-1; i++) 
{
    for (int j = 1; j < srcimg.cols-1; j++) 
    {

        int  x=0;
        for (int k=-1;k<=1;k++)
        {
             uchar* ptr=srcimg.ptr(k+i)+j-1; 
             for (int l=-1;l<=1;l++,ptr++)
                 x +=*ptr;
        }
    }
}

图像边框未处理。 现在,如果您想模糊图像,请使用 blur 方法

你可以使用这个post too

【讨论】:

  • 我想。当图像由'imread()'传递时。它是被创造出来的。所以它被装扮成连续的。在这种情况下,我们可以使用 opencv 中的 data 字段。
  • May be。您没有说在您的问题中使用了 imread 。但这并不重要。 ptr 是写像素的好方法。 data 可以为 null 且带有非 empty matrix
【解决方案2】:

我正在做这样的事情。

        int sr = 3;
        for (int j = 0; j < srcimg.rows; j++) {
            for (int i = 0; i < srcimg.cols; i++) {

                uchar* cp_imptr = im.data;
                uchar* tptr = im.data + imstep *(sr + j) + (sr + i);

                int val_tptr = cp_imptr [imstep *(sr + j) + (sr + i)]; //pointer of image data amd step at 3x3 

                int val_cp_imptr = cp_imptr[imstep *j + i];

                double s = 0;

                for (int n = templeteWindowSize; n--;)
                {
                    for (int m = templeteWindowSize; m--;)
                    {
                        uchar* t = tptr;      //pointer of template 

                        // sum 
                        s += *t;
                        t++;
                    }
                    t += cstep;
                }
            }
            cout << endl;
        }

【讨论】:

    猜你喜欢
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    相关资源
    最近更新 更多