ある種の「ホリデープロジェクト」として、私はOpenCVで遊んでいて、ものを検出して測定したいと思っています。
現在のワークフロー(初期段階-検出):
- グレースケールに変換(cv :: cvtColor)
- アダプティブしきい値を適用します(cv :: adapterThreshold)
- キャニーエッジ検出を適用する(cv :: Canny)
- 輪郭の検索(cv :: findContours)
私の結果はちょっとくだらないです、そして私は進むべき正しい方向が何であるかわかりません。私はすでにcvBlobを現在のセットアップ(OSX 10.7.2、Xcode 4.2.1)で動作させていますが、それはより良い方法ですか?もしそうなら、どうすればそれを正しい方法で実装できますか?
または、最初にバックグラウンド減算が必要ですか?私はそれを試しましたが、その後輪郭を見つけることができませんでした
これが私の画像です:
これが私の出力です。輪郭を最初の画像に戻します。
アップデート
私はそれを私のプログラムで動作させました、そして私の出力は少し異なって見えます…</ p>
- (IBAction)processImage:(id)sender
{
cv::Mat forground = [[_inputView image] CVMat];
cv::Mat result = [self isolateBackground:forground];
[_outputView setImage:[NSImage imageWithCVMat:result]];
}
- (cv::Mat)isolateBackground:(cv::Mat &)_image
{
int rh = 255, rl = 100, gh = 255, gl = 0, bh = 70, bl = 0;
cv::cvtColor(_image, _image, CV_RGB2HSV_FULL);
cv::Mat element = getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5));
cv::Mat bgIsolation;
cv::inRange(_image, cv::Scalar(bl, gl, rl), cv::Scalar(bh, gh, rh), bgIsolation);
bitwise_not(bgIsolation, bgIsolation);
erode(bgIsolation, bgIsolation, cv::Mat());
dilate(bgIsolation, bgIsolation, element);
return bgIsolation;
}