Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 图像指针窗口操作_C++_Opencv_Image Processing - Fatal编程技术网

C++ 图像指针窗口操作

C++ 图像指针窗口操作,c++,opencv,image-processing,C++,Opencv,Image Processing,如果我们使用Mat图像的步骤和数据通过指针访问像素。见下面的例子 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;

如果我们使用Mat图像的
步骤
数据
通过指针访问像素。见下面的例子

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;
    }
}
int step=srcimg.step;
对于(int j=0;j
问题: 如何使用指针步进图像执行3x3加权平均值操作?
谢谢

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

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

for(int i=1;i对于(intk=-1;k我正在做这样的事情

        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;
        }
intsr=3;
对于(int j=0;j我想不出来。当图像经过'imread()“。它是被创建的。所以它被修饰为连续的。在这种情况下,我们可以在opencv中使用数据字段。。你没有说在你的问题中使用了imread。但这并不重要。这是一种很好的写入像素的方法。数据可以为空,而非。我在这里发布了一个模糊过滤器示例:。修改我的代码示例以执行3x3 w应该很简单平均第十八。
        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;
        }