首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用c++在开放式cv中访问图像中的元素

使用c++在开放式cv中访问图像中的元素
EN

Stack Overflow用户
提问于 2014-02-21 07:41:48
回答 2查看 64关注 0票数 0

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

代码语言:javascript
复制
for(int m=0;m<10;m++)
{
    for(int n=0;n<90;n++)
    {
         int block_width = Ns;
         int block_height = Ns;
         int roi_origin_x = m;
         int roi_origin_y = n;
         cv::Rect roi(roi_origin_x, roi_origin_y, block_width, block_height);
         cv::Mat region = obtained_mask(roi);
         std::cout<< " region " <<region<< std::endl;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-21 07:55:13

看起来您的图像是灰色的,您正在尝试将其作为RGB图像从文件中加载。所以你在每个通道上都有重复的强度值。RGB中每个通道的等数值表示一个灰色颜色(从白色到黑色,在RGB立方体的对角线中移动)。您可以使用regioncvtColor转换为灰度图像,也可以检索region像素的第一个通道,这会减少处理周期的时间。

票数 1
EN

Stack Overflow用户

发布于 2014-02-21 07:53:57

这可能与你的图像的RGB频道有关。

尝试以下几点:

代码语言:javascript
复制
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
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21928250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档