根據四邊形的四個頂點座標點,通過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;//點不在區域內
}