(OpenCv2.4 Visual c++ 2010)の線で接続したい2つのポイントがあります。
彼の線上の点と、findContours を使用して見つけた輪郭との交点を探しています。
私の質問は、輪郭との交点をチェックするために、この線からのポイントを構造にどのように入力するのですか????
ライン上のポイントを思いつく方法を提供できれば、それは良いことです.
ありがとう
(OpenCv2.4 Visual c++ 2010)の線で接続したい2つのポイントがあります。
彼の線上の点と、findContours を使用して見つけた輪郭との交点を探しています。
私の質問は、輪郭との交点をチェックするために、この線からのポイントを構造にどのように入力するのですか????
ライン上のポイントを思いつく方法を提供できれば、それは良いことです.
ありがとう
それを行う正しい方法は、ブレゼンハムの直線アルゴリズムを計算することです:
ブレゼンハム ライン アルゴリズムは、与えられた 2 点間の直線に近い近似を形成するために、n 次元ラスターのどの点をプロットする必要があるかを決定するアルゴリズムです。
OpenCV の drawLine 関数は、おそらくこのアルゴリズムを使用しています。速度が問題にならない場合の別の方法: マスク イメージに線を描画し、このマスク内のピクセル (または少なくとも線の周りの ROI) をループして、点の座標を収集します。
cv::Mat mask = cv::Mat::zeros(originalImage.size(), CV_8U);
cv::Point p1, p2;
std::vector<cv::Point> points;
cv::line(mask, p1, p2, CV_RGB(255,255,255), CV_AA);
for (int row = min(p1.y, p2.y); row < max(p1.y, p2.y); ++row)
for (int col = min(p1.x, p2.x); col < max(p1.x, p2.x); ++col)
if(mask.at<unsigned char>(row, col) != 0)
points.push_back(cv::Point(col, row));