【发布时间】:2014-10-21 08:29:19
【问题描述】:
我想在 opencv 中创建 mat 文件并将它们初始化为零(所有像素为黑色)。因此我使用 用于初始化目的:
Mat img = Mat::zeros(image.rows, image.cols, CV_8UC1);
之后,我得到了一些矩形,其位置位于该图像内,我想绘制矩形白色的对应区域。如何在 mat 文件中绘制区域?
我有以下函数来绘制矩形。但是我想绘制所有矩形而不仅仅是边界。
static Mat image_draw(Mat image, vector<Rect> rect, CvScalar color){
for(int i = 0; i < faces.size(); i++)
{
Point pt1(rect[i].x + rect[i].width, rect[i].y + rect[i].height);
Point pt2(rect[i].x, rect[i].y);
rectangle(image, pt1, pt2, color, 5, 8, 0);
}
return image;
}
我想要做的确切的事情是为我的矩形创建一个热图,以便重叠的边界框具有比简单的非重叠矩形更高的值(接近 255)。我改变厚度:
img = image_draw( img, rects, cvScalar(255, 102, 255, 0), -1);
变量 rects 包含 0 到 10 个矩形。我想以某种方式聚合矩形绘图。不只是重新绘制矩形。
如果我想使其功能化,是这样的:编辑最终解决方案:
static Mat heatmap2(Mat image1, vector<Rect> faces, CvScalar color, int thickness) {
cv::Mat heatmap(image1.rows, image1.cols, CV_8U,cv::Scalar(0));
for(int i = 0; i < faces.size(); i++)
{
cv::Mat temp(image1.rows, image1.cols , CV_8U, cv::Scalar(0));
Point pt1(faces[i].x + faces[i].width, faces[i].y + faces[i].height);
Point pt2(faces[i].x, faces[i].y);
rectangle(temp, pt1, pt2, color, thickness, 8, 0);
heatmap+=temp;
}
return heatmap;
}
【问题讨论】: