缩放CV_8UC1类型的opencv矩阵给出零和

时间:2017-07-31 18:05:22

标签: c++ opencv

我正在尝试按8UC1缩放1.0f/255类型的灰度图像, 通过以下操作

image.convertTo(image,CV_32F,1.0f/255,0);  //convert and scale

在检查上述输出后,我发现所有值都太接近于零。例如,在值应为0.2784的位置,我得到1.23417e-06

所以,我试着看看是否可以撤消缩放并获得输入,即将结果从上面乘以255,使用

cv::imwrite("undo_scaling.jpg",image*255); //rescale and write to disk
奇怪的是,输入图像可以重建。 我在哪里出现缩放操作错误?

修改

以下是我尝试预处理图像。这涉及以下步骤

  1. 涂抹面膜
  2. 裁剪结果
  3. 最后,将像素值缩放255
  4. 我使用以下代码:

    cv::Mat maskCrop(std::string imageName, std::string maskName)
    {
        cv::Mat image,mask,final_image;
        image = cv::imread( imageName, CV_LOAD_IMAGE_GRAYSCALE);
    
        mask = cv::imread( maskName,CV_LOAD_IMAGE_GRAYSCALE);
    
        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 = dstImage(roi);
        crop.convertTo(crop,CV_32F,1.0f/255,0); 
    
        return crop;
    }
    

    以下是输入图片:

    original image

    以下是要应用于其上的蒙版:

    enter image description here

0 个答案:

没有答案