OpenCV獲取不規則三角形 / 四邊形區域內的所有點座標,並判斷某一點是否在區域內

根據四邊形的四個頂點座標點,通過OpenCV裏的cv::drawContours函數畫到黑色背景圖上,如下圖所示,遍歷圖像獲取灰度值爲255的點的座標,即是四邊形內所有點的座標,三角形同上, 要判斷某一點是否在三角形或四邊形區域的,使用迭代器遍歷查找結果點即可。

        cv::Mat drawing_contour = cv::Mat::zeros(img.size(), CV_8UC1);

	std::vector<std::vector<cv::Point>> conptsss;
	std::vector<cv::Point> roipts;//三角形或四邊形的頂點,排序應爲順時針或者逆時針排序

	conptsss.push_back(roipts);
	cv::drawContours(drawing_contour, conptsss, 0, cv::Scalar(255), cv::FILLED);

        std::vector<cv::Point> rectanglepts;//三角形或四邊形內的所有點的座標
	for (int ii = 0; ii < image.rows; ii++)
	{
		for (int jj = 0; jj < image.cols; jj++)
		{
			if (drawing_contour.ptr<uchar>(ii)[jj] == 255)
			{
				rectanglepts.push_back(cv::Point(jj, ii));
			}
		}
	}
        cv::Point pt;
        std::vector<cv::Point>::iterator iter;
	iter = std::find(rectanglepts.begin(), rectanglepts.end(), pt);

	if (iter != rectanglepts.end())//點在區域內
	{
		return true;
	}
        else
        {
                return false;//點不在區域內
        }
發佈了14 篇原創文章 · 獲贊 11 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章