效果
说明:了解到cv::fillPoly可同时对个区域进行填充。刚好笔者在使用摄像头做拉流工作,于是想能不能通过该cv函数实现对画面除了中心区域外都做填充呢。
下图左侧两条线分别代表了两个区域的顶点及设定的曲线范围,从而生成右侧的填充图。以达到只保留中心矩形范围的图像。
代码
// iVWidth, iVHeight 图像宽高
cv::Size nFillSize(200, 200); // 中心区域尺寸
cv::Rect nFillRect(cv::Point((iVWidth - nFillSize.width) / 2, (iVHeight - nFillSize.width) / 2), nFillSize);
cv::Point pts[2][8] =
{
{
cv::Point(0, 0),
cv::Point(0, iVHeight),
cv::Point(nFillRect.x + nFillRect.width, iVHeight),
cv::Point(nFillRect.x + nFillRect.width, nFillRect.y + nFillRect.height),
cv::Point(nFillRect.x, nFillRect.y + nFillRect.height),
cv::Point(nFillRect.x, nFillRect.y),
cv::Point(nFillRect.x + nFillRect.width, nFillRect.y),
cv::Point(nFillRect.x + nFillRect.width, 0)
},
{
cv::Point(nFillRect.x + nFillRect.width, 0),
cv::Point(iVWidth, 0),
cv::Point(iVWidth, iVHeight),
cv::Point(nFillRect.x + nFillRect.width, iVHeight),
}
};
const cv::Point* ppt1[2] = { pts[0],pts[1] };
int ptsCnt[2] = { 8,4 };
/*
参数1: 输入Mat
参数2: 顶点数组
参数3: 顶点数目数组
参数4: 线条数目
参数5: 填充色
*/
cv::fillPoly(Mat, ppt1, ptsCnt, 2, cv::Scalar(0, 0, 0, 0));
关注
笔者 - jxd
微信公众号搜索 “码农总动员” 或 微信扫描下方二维码,了解更多你不知道的XX,O(∩_∩)O
本文含有隐藏内容,请 开通VIP 后查看