通过图像指针进行窗口操作



如果我们使用stepdata的 Mat Image 通过指针访问像素。 请参阅下面的示例

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 加权平均操作?谢谢

您不能在 opencv 中使用数据字段,因为内存不是连续的。 您可以使用isContinu()方法进行检查。

现在你可以这样做了(图像类型是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;
        }
    }
}

不处理图像边框。现在,如果要模糊图像,请使用模糊方法

你也可以使用这篇文章

我正在做这样的事情.

        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;
        }

相关内容

  • 没有找到相关文章

最新更新