0

私は小さなチェス盤を持っていて、白い四角に幾何学的なオブジェクトを配置しました。今、cv::findContours() を使用して画像からそれらを抽出しようとしています。ここに私のコードとソースと結果の画像があります:

int main (){
    cv::Mat img = cv::imread("quad.jpg",0);
    cv::Mat image ;
    cv::Mat result(img.size(),CV_8U,cv::Scalar(255));
    std::vector<std::vector<cv::Point>> contours;
    //std::vector<std::vector<cv::Point2f>> hiararchy;
    cv::threshold(img,img,127,255,CV_THRESH_BINARY_INV);
    cv::findContours(img,contours,/*hiararchy,*/CV_RETR_TREE    , CV_CHAIN_APPROX_NONE );
-1, // draw all contours
cv::Scalar(0), // in black
2); // with a thickness of 2
    cv::imshow("result",result);
    //cv::imwrite("con.jpg",result);
    cv::waitKey(0);

    return 0;

ソース

ソース

結果

結果

プログラムにどのように伝えるかについてのアイデア:白い四角だけに注意してください

ありがとう!

4

1 に答える 1

1

ハフ変換を使用して、イメージ内の最長の線を見つけます。これにより、チェッカーボードのグリッドが得られます。次に、グリッド上の各「セル」内の平均ピクセル カラーをチェックして、それが黒の正方形か白の正方形かを判断できます。

于 2013-07-18T09:46:09.330 に答える