初めての投稿ですので、見落とし等ありましたらご容赦ください。
私は Visual Studio C++ で OpenCV2 をいじっています。基本的なオブジェクトトラッカーが機能しています。ガウスぼかしを適用し、HSV に変換し、トラックバーでしきい値処理し、浸食してから膨張させます。ここで、トラックバーを使用せずにしきい値を設定する色を簡単に調整する方法を設定したいと考えています。関心のある領域を設定して、平均 BGR または HSV 値を取得しようとしました (両方の方法を試しました)。次に、必要に応じてトラックバーを使用して微調整を行いますが、うまくいかないようです。私は正しい軌道に乗っていますか、それとももっと良い方法がありますか?
私は基本的にこのビデオに従って、自分がいる場所にたどり着きました。 https://www.youtube.com/watch?v=bSeFrPrqZ2A
コピーして貼り付けるコードを探しているわけではありません。アルゴリズムまたはそれを行う方法の説明を探しています。乾杯
編集
申し訳ありませんが、私はそれをクリアしようとします。私が行ったことは、ホーム ロボット ビジョン プロジェクト用のオブジェクト トラッキング プログラムを作成したことです。しきい値を設定する色を簡単に調整できるようにしたいだけです。現時点では、トラックバーを使用して、しきい値処理の最小および最大 HSV 値を設定しています。次に、Erode と Dilate を使用してバイナリ イメージをクリアします。cv::findConturs と cv::moments を使用して最大輪郭の重心を見つける前に。私が試したのは、画面の中央に小さな 40x40 ピクセルの正方形を設定することです。例えば、この四角に緑色のボールを持ってスペースキーを押すと。正方形の各ピクセルを循環し、色相、彩度、明度を個別に取得します。次に、それぞれのモードを取得し、それを使用して最小しきい値と最大しきい値を設定します。
ここにコードの一部があります
if(cv::waitKey(20) == 32){ // スペースバーを待つ
int count = 0;
cv::Mat roi_Crop = frame_HSV(roi); //create cropped image from frame_HSV
for(int i=0; i<roi_Crop.rows; i++) // cycle through each pixel
{
for(int j=0; j<roi_Crop.cols; j++)
{
Hue[count] = roi_Crop.at<cv::Vec3b>(i,j)[0];
Sat[count] = roi_Crop.at<cv::Vec3b>(i,j)[1];
Val[count] = roi_Crop.at<cv::Vec3b>(i,j)[2];
count++;
}
}
HSV_Mode[0] = findMode(Hue);
HSV_Mode[1] = findMode(Sat);
HSV_Mode[2] = findMode(Val);
}
これが役立つことを願っています。