Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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
Opencv 使用c+从打开的cv中的图像访问元素+;_Opencv_Image Processing - Fatal编程技术网

Opencv 使用c+从打开的cv中的图像访问元素+;

Opencv 使用c+从打开的cv中的图像访问元素+;,opencv,image-processing,Opencv,Image Processing,我使用以下代码从图像访问[5x5]块。但是我得到一个[15x5]块,每个元素重复三次。有人能指出这段代码中的错误吗。? 我在下面的链接中问了一个关于如何访问元素的问题。 for(int m=0;m它可能与图像的RGB通道有关 请尝试以下操作: int block_width = Ns; int block_height = Ns; for(int roi_origin_y=0; roi_origin_y<90; ++roi_origin_y) { for(int roi_orig

我使用以下代码从图像访问[5x5]块。但是我得到一个[15x5]块,每个元素重复三次。有人能指出这段代码中的错误吗。? 我在下面的链接中问了一个关于如何访问元素的问题。


for(int m=0;m它可能与图像的RGB通道有关

请尝试以下操作:

int block_width = Ns;
int block_height = Ns;
for(int roi_origin_y=0; roi_origin_y<90; ++roi_origin_y)
{
    for(int roi_origin_x=0; roi_origin_x<10; ++roi_origin_x)
    {
        if(roi_origin_y+block_width>=obtained_mask.rows || roi_origin_x+block_height>=obtained_mask.cols)
            break;
        cv::Mat region(block_height,block_width,obtained_mask.type());
        for(int dy=0; dy<block_height; ++dy)
        {
            for(int dy=0; dy<block_height; ++dy)
            {
                for(int k=0; k<obtained_mask.channels(); ++k)
                    region(dy,obtained_mask.channels()*dx+k) = obtained_mask(roi_origin_y+dy,obtained_mask.channels()*(roi_origin_x+dx)+k);
            }
        }
        // TODO: process NsxNs block stored in region
    }
}
int block_width=Ns;
int block_height=Ns;
for(int roi\u origin\u y=0;roi\u origin\u y=govered\u mask.cols)
打破
cv::Mat区域(块高、块宽、获得的块掩码.type());

对于(int dy=0;dy,您的图像似乎是灰度级的,您试图将其作为RGB图像从文件中加载。因此,每个通道中都有重复的强度值。RGB中每个通道的相等值表示灰色(从白色到黑色,在RGB立方体的对角线上移动)。您可以使用
cvtColor
区域
转换为灰度图像,或者您可以检索
区域
像素的第一个通道,这会减少处理周期时间。

如果您分别指定
Ns
获取的\u掩码
值和类型,效果会更好。Ns=5,获取的\u掩码类型是双倍的;
int block_width = Ns;
int block_height = Ns;
for(int roi_origin_y=0; roi_origin_y<90; ++roi_origin_y)
{
    for(int roi_origin_x=0; roi_origin_x<10; ++roi_origin_x)
    {
        if(roi_origin_y+block_width>=obtained_mask.rows || roi_origin_x+block_height>=obtained_mask.cols)
            break;
        cv::Mat region(block_height,block_width,obtained_mask.type());
        for(int dy=0; dy<block_height; ++dy)
        {
            for(int dy=0; dy<block_height; ++dy)
            {
                for(int k=0; k<obtained_mask.channels(); ++k)
                    region(dy,obtained_mask.channels()*dx+k) = obtained_mask(roi_origin_y+dy,obtained_mask.channels()*(roi_origin_x+dx)+k);
            }
        }
        // TODO: process NsxNs block stored in region
    }
}