首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >OpenCV返回黑白图像而不是灰度

OpenCV返回黑白图像而不是灰度
EN

Stack Overflow用户
提问于 2017-07-29 19:53:07
回答 1查看 1.1K关注 0票数 0

下面是我对图像进行预处理的尝试。这涉及到以下步骤

  1. 涂上口罩
  2. 裁剪结果
  3. 最后,将像素值缩放到255。

当我试图从第三步回到第二步时,我会得到一个黑白图像,而不是灰度图像。下面是我执行预处理的代码

代码语言:javascript
运行
复制
cv::Mat maskCrop(std::string imageName, std::string maskName)
{
    cv::Mat image,mask;
    image = cv::imread( imageName, CV_LOAD_IMAGE_GRAYSCALE);
    mask = cv::imread( maskName,CV_LOAD_IMAGE_GRAYSCALE);
    cv::Mat final_image;
    cv::resize(image, image, mask.size());  // make the size of mask and image same
    
    cv::bitwise_and(image, mask, final_image); //Apply mask
    
    // define rectangular window for cropping
    int offset_x = 1250;  // top left corner, for cropping
    int offset_y = 1550;
    
    cv::Rect roi;
    roi.x = offset_x;
    roi.y = offset_y;
    roi.width = 550;
    roi.height = 650;
    
    // Crop the original image to the defined ROI //
    
    cv::Mat crop = final_image(roi);
   //scale the image
    float beta = 1.0 / 255.0;
    crop *=beta;  // divide the max pixel vaue i.e. 255
    
    //Examinig whether scaling can be undone !!!!
    cv::imwrite("/home/dpk/Desktop/ip-rings/gray_image.jpg",crop*255);
    
    return crop;
}

下面是当我试图按255撤消缩放时得到的输出(步骤3)

以下是预期的输出

是什么导致图像是黑白的而不是灰度的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-29 20:08:42

因为这类数据..。假设crop矩阵类是uchar,当除以255时,输出为0或1(0到254之间的每个强度为0,255将为1),当您在255中的多路输出时,输出将为0和255。所以测试这段代码

代码语言:javascript
运行
复制
{
.
.
cv::Mat crop = final_image(roi);
crop.convertTo(crop,
               CV_32F,       //New Type
               1.0f/255,     //Scaling
               0);           //offset
cv::imwrite("/home/dpk/Desktop/ip-rings/gray_image.jpg",crop*255);

return crop;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45393464

复制
相关文章

相似问题

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