2017-07-29 12 views
0

次は私の画像の前処理です。それは以下を伴うことは、OpenCVはグレースケールの代わりに白黒画像を返します

  1. 私はステップ2に戻って、手順3から移動しようとすると255

によってピクセル値をスケーリング、マスク

  • 作物結果最後に
  • を適用する手順グレースケールの画像ではなく、白黒の画像が得られます。次 は私のコードは、私は255でスケーリングを取り消ししようとすると、次の

    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; 
    } 
    

    は、私が手に出力される前処理を実行する(ステップ3)

    Actual Output

    は以下の予想です黒とWHする画像の原因は何出力

    expected output

    グレースケールの代わりにite?

  • +0

    データ型は、符号なし8ビット整数でテストします。これを浮動小数点スカラーで掛けても、それは変わりません。 –

    答えて

    2

    これは、データクラス... cropのマトリックスクラスがucharであるとし、255に分割すると出力が0または1(0〜254の間のすべての強度が0、255が1になります)出力は0〜255 なり255であなたmultipy出力はとても `crop`行列のこのコード

    { 
    . 
    . 
    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; 
    } 
    
    関連する問題