2016-10-29 95 views
1

私の画像(.jpgに保存されたRGB)を変換してその特定の領域を強調する必要がありました。 ImageJを使用して私は、LAB色空間での画像のLチャンネルの抽出が、私がさらなる検査に必要なものであることを発見しました。 C++/OpenCVの中に実装される場合 、結果は(写真ImageJ L-channelOpenCV L-channelを参照)ImageJのものとは全く異なるものである。OpenCVとImageJのRGB - > L * a * b変換の違い

#include "opencv2/opencv.hpp" 
#include "opencv2/core/core.hpp"   
#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/imgproc/imgproc.hpp" 

using namespace cv; 
using namespace std; 

int main(){ 

    vector <Mat> lab_planes; 
    Mat src, lab; 

    src = imread("Pic.jpg", CV_LOAD_IMAGE_COLOR); 
    cvtColot(src, lab, CV_BGR2Lab); 
    split(lab, lab_planes); 

    imshow("L", lab_planes[0]); 
    imshow("a", lab_planes[1]); 
    imshow("b", lab_planes[2]); 

    waitKey(0); 
    return 0; 
} 

私はそれをグーグルしようとしたと記憶の違いに問題があるかもしれないことが判明しましたチャンネルの範囲(0〜255の代わりに0〜100)やRGBプレゼンテーションがありますが、ImageJと同じ結果を受け取る方法はわかりません。

ありがとうございます!

答えて

1

は次のようになります。

cv::normalize(L,L,0,255,cv::NORM_MINMAX); 

または(より正確かもしれない)だけ(最初に掛け、その後CV_32Fに変換し、バック変換)2.55を掛けます。

+0

簡単!ありがとう、アンドレイ。 'extend'の範囲を0〜255にすると結果が得られました。 – melodisease

関連する問題