我的问题是Opencv专家,我已经检测到道路线(左右线)所以我的目标是用半透明蓝色涂抹道路区域。所以我用过:
cv::fillPoly(image, ppt, npt, 1, CV_RGB(0, 0,200), lineType);
ppt-包含左右点, npt-分数
但是,我得到的是在道路上填充的区域,这不是我的目标。
所以,我的问题是有没有解决方案用半透明的方式绘制道路区域?我被告知要添加另一个频道,如:
cv::Mat channel[3];
split(image, channel);
channel[0] = cv::Mat::zeros(image.rows, image.cols, CV_8UC1);
merge(channel, 3, image);cv::imshow("kkk",image);
但问题是我将所有图像都设置为半透明,而我只想要道路区域。任何想法都赞赏!!
感谢
答案 0 :(得分:0)
试试这段代码(无法在手机上测试):
cv::Mat polyImage = cv::Mat(image.rows, image.cols, CV_8UC3,cv::Scalar (0,0,0));
cv::fillPoly(polyImage, ppt, npt, 1, CV_RGB(0, 0,200), lineType);
float transFactor = 0.5f; // the bigger the more transparent
for(int y=0;y <image.rows;++y)
for(int x=0;x <image.cols; ++x)
{
if(polyImage.at<cv::Vec3b>(y,x) != cv::Vec3b(0,0,0) )
image.at<cv::Vec3b>(y,x) = (transFactor)*image.at<cv::Vec3b>(y,x) + (1.0f - transFactor)*polyImage.at<cv::Vec3b>(y,x);
}