2016-05-20 4 views
4

私はOpenCVで次のことをしようとしています。どのように値よりも小さい場合、Matのすべてのピクセルを特定の値に設定できますか?Matのすべてのピクセルを値よりも小さい値に設定しますか?

だから、私はthresholdのようなことをしたいと思いますが、私は与えられたしきい値を超えるピクセルに触れたくないので、あまり好きではありません。例えば

:50

任意のアイデアよりも小さい50に画素ごとに設定されていますか?

+0

何か試しましたか? – Pierre

+0

C++、Matlab、Python、Java? – Pierre

+0

C++では、私は設定しようとしましたが、実際にどのようにそのようなマスクをどのように使用するのかはわかりません:/ –

答えて

0

私はOpenCVでLUTの機能を発見して以来、私はできる限りどこでも使っています。そして、これは良い機会のように見えます。

私はあなたがタイプCV_8Uのマトリックスで作業しており、OpenCVをC++プログラムで使用していると仮定します(それ以外の場合はPythonに移植しやすいはずです)。あなたが最初にこのようなlookUpTableを定義する必要が

cv::Mat lookUpTable(256,1,CV_8U); 
for(int i = 0; i < 256; i++) { 
    if(i < 50) 
     lookUpTable.at<uchar>(i,0) = 50; 
    else 
     lookUpTable.at<uchar>(i,0) = i; 
} 

これは、50以下のマトリックスのすべての値は、その後50

にもたらされることを意味し、唯一のことはやって残っていますこれは

cv::Mat image; # your original image 
cv::Mat thresholdedImage; 
cv::LUT(image, lookUpTable, thresholdedImage); 

ここに移動します。

もっと効率的なソリューションがあるかもしれませんが、多分私は不必要に複雑なことをやっているかもしれませんが、私はそれがエレガントであると感じています。あなたの特定の要求について

+0

私はCV_32Fを使用しています。だから、私のピクセルの大部分は浮動小数点なので、実際には私はucharでアクセスできません。 –

+0

ああはい。それから、私のソリューションは本当にあなたに適応していない、私は恐れている。 '1.0 - originalImage'にOpenCvスレッショルド関数を適用しようとすることができます – Sunreef

+0

実際にはOpenCVスレッショルド関数を使うことができません。または私は間違っていると思いますか? –

5

50

セットの全ての画素< 50

行列式を使用して

setToは簡単です:OpenCVので

Mat m = ... 
m.setTo(50, m < 50); 

、あなたは計算しますできますcv::threshold、または比較Matrix Expressionを使用してしきい値を設定します。

あなたはおそらくすでにやっているとして、あなたがすべての値に255> thを設定できます。つまり、他の方法で回避のために

double th = 100.0; 
Mat m = ... 
Mat thresh = m > th; 

double th = 100.0; 
Mat m = ... 
Mat thresh; 
threshold(m, thresh, th, 255, THRESH_BINARY); 

double th = 100.0; 
Mat m = ... 
Mat thresh; 
threshold(m, thresh, th, 255, THRESH_BINARY_INV); // <-- using INVerted threshold 

か:すべての値< th255に設定され、あなたは次のように行うことができます

double th = 100.0; 
Mat m = ... 
Mat thresh = m <= th; // <-- using less-or-equal comparison 

//Mat thresh = m < th; // Will also work, but result will be different from the "threshold" version 

、しばらくthresholdは、入力の同じタイプの結果行列が生成されますのでご注意ください行列式は常にCV_8Uの結果を生成します。

+0

恐ろしいです。どうもありがとう。 – Misaki

関連する問題