terminate called after throwing an instance of 'cv::Exception' what(): OpenCV(4.5.4) /home/cicv/Downloads/opencv-4.5.4/modules/core/src/copy.cpp:1026: error: (-215:Assertion failed) top >= 0 && bottom >= 0 && left >= 0 && right >= 0 && _src.dims() <= 2 in function 'copyMakeBorder'
时间: 2024-02-02 17:04:19 浏览: 106
这个错误是由于 `copyMakeBorder` 函数的参数不正确导致的。根据错误信息,可以看出是边界的大小设置不正确。
你可以尝试修改 `copyMakeBorder` 函数的第二个和第三个参数,使其不为负数。具体来说,可以将它们设置为图像大小的一定比例。例如,将它们设置为图像高度的 $5\%$,宽度的 $5\%$,代码如下:
```c++
#include <opencv2/opencv.hpp>
int main() {
cv::Mat img = cv::imread("input.jpg");
cv::Mat T = cv::Mat::zeros(2, 3, CV_32FC1);
T.at<float>(0, 0) = 1;
T.at<float>(1, 1) = 1;
T.at<float>(1, 2) = -50; // 向上平移 50 个像素
cv::Mat dst;
cv::warpAffine(img, dst, T, img.size());
int top = cvRound(dst.rows * 0.05);
int bottom = cvRound(dst.rows * 0.05);
int left = cvRound(dst.cols * 0.05);
int right = cvRound(dst.cols * 0.05);
cv::copyMakeBorder(dst, dst, top, bottom, left, right,
cv::BORDER_CONSTANT, cv::Scalar(255, 255, 255));
cv::imshow("output", dst);
cv::waitKey();
return 0;
}
```
这样应该就能够去掉黑框了。如果还有其他问题,请提供更多信息。
阅读全文