根据四边形的四个顶点坐标点,通过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;//点不在区域内
}