我正在尝试与图像一起绘制边框,我从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个结果
答案 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