私はOpenCVで次のことをしようとしています。どのように値よりも小さい場合、Matのすべてのピクセルを特定の値に設定できますか?Matのすべてのピクセルを値よりも小さい値に設定しますか?
だから、私はthresholdのようなことをしたいと思いますが、私は与えられたしきい値を超えるピクセルに触れたくないので、あまり好きではありません。例えば
:50
任意のアイデアよりも小さい50に画素ごとに設定されていますか?
私はOpenCVで次のことをしようとしています。どのように値よりも小さい場合、Matのすべてのピクセルを特定の値に設定できますか?Matのすべてのピクセルを値よりも小さい値に設定しますか?
だから、私はthresholdのようなことをしたいと思いますが、私は与えられたしきい値を超えるピクセルに触れたくないので、あまり好きではありません。例えば
:50
任意のアイデアよりも小さい50に画素ごとに設定されていますか?
私は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);
ここに移動します。
もっと効率的なソリューションがあるかもしれませんが、多分私は不必要に複雑なことをやっているかもしれませんが、私はそれがエレガントであると感じています。あなたの特定の要求について
私はCV_32Fを使用しています。だから、私のピクセルの大部分は浮動小数点なので、実際には私はucharでアクセスできません。 –
ああはい。それから、私のソリューションは本当にあなたに適応していない、私は恐れている。 '1.0 - originalImage'にOpenCvスレッショルド関数を適用しようとすることができます – Sunreef
実際にはOpenCVスレッショルド関数を使うことができません。または私は間違っていると思いますか? –
: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
か:すべての値< th
255
に設定され、あなたは次のように行うことができます
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
の結果を生成します。
恐ろしいです。どうもありがとう。 – Misaki
何か試しましたか? – Pierre
C++、Matlab、Python、Java? – Pierre
C++では、私は設定しようとしましたが、実際にどのようにそのようなマスクをどのように使用するのかはわかりません:/ –