Opencv 如果输入(src)是Mat映像,该循环如何工作?

Opencv 如果输入(src)是Mat映像,该循环如何工作?,opencv,Opencv,我正在研究像素的平均值,我知道这个循环可以用于任何2d阵列。但是,如果src是Mat映像(OpenCV),该如何工作呢? 我很难在Mat图像的函数中传递这些参数 我的问题有意义吗 #include <iostream> const unsigned dim = 3; typedef int array_type [dim][dim]; #包括 常数无符号尺寸=3; typedef int数组_type[dim][dim]; 以下是循环: void average(array_t

我正在研究像素的平均值,我知道这个循环可以用于任何2d阵列。但是,如果src是Mat映像(OpenCV),该如何工作呢? 我很难在Mat图像的函数中传递这些参数 我的问题有意义吗

#include <iostream>

const unsigned dim = 3;
typedef int array_type [dim][dim];
#包括
常数无符号尺寸=3;
typedef int数组_type[dim][dim];
以下是循环:

void average(array_type& dest, const array_type& src)
{
    // corners:
    dest[  0  ][  0  ] = 
        (src[  0  ][  0  ] + src[  0  ][  1  ] + src[  1  ][  0  ] + src[  1  ][  1  ])/4;
    dest[dim-1][  0  ] = 
        (src[dim-1][  0  ] + src[dim-2][  0  ] + src[dim-1][  1  ] + src[dim-2][  1  ])/4;
    dest[  0  ][dim-1] = 
        (src[  0  ][dim-1] + src[  1  ][dim-1] + src[  0  ][dim-2] + src[  1  ][dim-2])/4;
    dest[dim-1][dim-1] = 
        (src[dim-1][dim-1] + src[dim-2][dim-1] + src[dim-1][dim-2] + src[dim-2][dim-2])/4;

    // top, bottom, and sides:
    for (unsigned i = 1; i < dim - 1; ++i)
    {
        const unsigned j = dim - 1;

        dest[0][i] = 
            (src[0][i-1] + src[0][i] + src[0][i+1] + src[ 1 ][i-1] + src[ 1 ][i] + src[ 1 ][i+1])/6;
        dest[j][i] = 
            (src[j][i-1] + src[j][i] + src[j][i+1] + src[j-1][i-1] + src[j-1][i] + src[j-1][i+1])/6;

        dest[i][0] = 
            (src[i-1][0] + src[i][0] + src[i+1][0] + src[i-1][ 1 ] + src[i][ 1 ] + src[i+1][ 1 ])/6;
        dest[i][j] = 
            (src[i-1][j] + src[i][j] + src[i+1][j] + src[i-1][j-1] + src[i][j-1] + src[i+1][j-1])/6;
    }

    // middle:
    for (unsigned i = 1; i < dim - 1; ++i)
    {
        for (unsigned j = 1; j < dim - 1; ++j)
        {
            dest[i][j] = (src[i-1][j-1] + src[i-1][j] + src[i-1][j+1] +
                          src[ i ][j-1] + src[ i ][j] + src[ i ][j+1] +
                          src[i+1][j-1] + src[i+1][j] + src[i+1][j+1]) / 9 ;
        }
    }
}
void average(数组类型和dest,常量数组类型和src)
{
//角落:
目的地[0][0]=
(src[0][0]+src[0][1]+src[1][0]+src[1][1])/4;
目的地[dim-1][0]=
(src[dim-1][0]+src[dim-2][0]+src[dim-1][1]+src[dim-2][1])/4;
目的地[0][dim-1]=
(src[0][dim-1]+src[1][dim-1]+src[0][dim-2]+src[1][dim-2])/4;
目的地[dim-1][dim-1]=
(src[dim-1][dim-1]+src[dim-2][dim-1]+src[dim-1][dim-2]+src[dim-2][dim-2])/4;
//顶部、底部和侧面:
用于(无符号i=1;i
我认为您只想知道如何像在2D阵列中一样访问
Mat图像
像素。请参阅下面的代码:

for(int i=0; i<image.rows; i++)
{
    for(int j=0; j<image.cols; j++)
    {
        value_from_Mat_array = image.at<uchar>(i,j);
    }
}

for(int i=0;i您可能根本不会使用opencv循环,而是使用:

Mat img; // your original image
Mat res; // filtered
Mat kernel(3,3,CV_32F,Scalar(1.0f/9));
filter2D(img,res,-1,kernel);