【发布时间】:2014-11-27 19:30:02
【问题描述】:
我想在 OpenCV 中创建一个包含一些完整矩形区域(比如 1 到 10 个区域)的蒙版。将其视为显示图像上感兴趣特征位置的掩码。我知道每个区域角落的像素坐标。
现在,我首先将 Mat 初始化为 0,然后循环遍历每个元素。使用“if”逻辑,如果它们属于该区域,我将每个像素设置为 255,例如:
for (int i = 0; i<mymask.cols, i++) {
for (int j = 0; j<mymask.rows, j++) {
if ( ((i > x_lowbound1) && (i < x_highbound1) &&
(j > y_lowbound1) && (j < y_highbound1)) ||
((i > x_lowbound2) && (i < x_highbound2) &&
(j > y_lowbound2) && (j < y_highbound2))) {
mymask.at<uchar>(i,j) = 255;
}
}
}
但这很笨拙,我认为效率低下。在这种情况下,我用 255 “填充”了 2 个矩形区域。但是除了使用 switch-case 并重复代码 n 次之外,没有可行的方法来更改我填充的区域数。
有没有人在想更聪明的事情?我宁愿不使用第 3 方的东西(除了 OpenCV ;)),我正在使用 VisualStudio 2012。
【问题讨论】:
-
mymask.at<i*mymask.rows + j> = 255;- 不应该是mymask.at<some_type>(j,i) = 255;吗? -
是的,当我写这个问题时,我无法访问我的代码,所以我写了我记得的......
-
好吧,“是的,可能”我的意思是你完全正确;)谢谢,我会纠正它!