绘制边框时参数错误

时间:2014-05-05 20:42:34

标签: c++ image opencv image-processing computer-vision

我正在尝试与图像一起绘制边框,我从opencv documentation得到了很好的帮助,还得到了here的语法,并且它运行正常,我尝试使用此值

copyMakeBorder( src, dst, top, bottom, left, right, bordertype , Scalar(0,255,0) );

它有效,但是当我尝试使用borderinterpolation使边框保持不变时,如

int borderInterpolate = (50, 100, BORDER_TRANSPARENT);
copyMakeBorder( src, dst, top, bottom, left, right, borderInterpolate , Scalar(0,255,0) );

它显示

的运行时错误
Bad argument (Unknown/Unsupportive border type)

以及如何在文档中给出第3个结果

enter image description here

1 个答案:

答案 0 :(得分:1)

引用borderInterpolate()的相关文档,该文档在copyMakeBorder()(强调我的)文档中引用:

  

边框类型,其中一个BORDER_ *,除了BORDER_TRANSPARENT 和BORDER_ISOLATED

这解释了您收到的错误 - BORDER_TRANSPARENT

不支持copyMakeBorder()

即使不支持BORDER_TRANSPARENT标志,仍然可以创建透明边框。只要您的常量值为零第四通道值,您就可以在BGRA图像上调用BORDER_CONSTANT时使用copyMakeBorder标志。一个简单的例子如下:

const auto im = cv::imread("some_image.jpg");
cv::cvtColor(im, im, CV_BGR2BGRA); // Image must have alpha channel!

// clone() below is important -- there is a bug if using ROI without cloning first.
const auto roi = im(cv::Rect(200,200,200,200)).clone();
cv::Mat bordered;
cv::copyMakeBorder(roi, bordered, 20, 20, 20, 20, cv::BORDER_CONSTANT, cv::Scalar::all(0));

顺便说一句,我不知道你在borderInterpolate的任务中的意图是什么,但是由于C ++的逗号运算符,你写的这行:

int borderInterpolate = (50, 100, BORDER_TRANSPARENT);

完全等同于:

int borderInterpolate = BORDER_TRANSPARENT; // 50 and 100 are evaluated and ignored