我是OpenCV的新手,在声明Mat实例时遇到了问题。
#include <opencv2\opencv.hpp>
int main(int argc, char *argv[]) {
cv::Mat before = cv::imread("./irene.jpg", CV_LOAD_IMAGE_COLOR);
cv::imshow("before", before);
cv::waitKey(0);
cv::Mat after(cv::Size(before.rows, before.cols), CV_8UC3);
for (int y = 0; y < before.rows; y++) {
for (int x = 0; x < before.cols; x++) {
after.at<cv::Vec3b>(y, x)[0] = before.at<cv::Vec3b>(y, x)[2];
after.at<cv::Vec3b>(y, x)[1] = before.at<cv::Vec3b>(y, x)[1];
after.at<cv::Vec3b>(y, x)[2] = before.at<cv::Vec3b>(y, x)[0];
}
}
cv::imshow("after", after);
cv::waitKey(0);
return 0;
}
只是用于更改图像颜色的简单代码。 问题是,当我尝试使用cv :: Size()时,编译器返回 Assertion Failure 。它可以构建,但是当我尝试按任意键以继续执行代码时,它会出现异常。
编译器引用并放在控制台上的是:
OpenCV(3.4.3)错误:断言失败((未签名)(i1 * DataType <_Tp> :: channels)<(无符号)(size.p [1] * channels()))在 cv :: Mat :: at,文件 c:\ opencv343 \ opencv \ build \ include \ opencv2 \ core \ mat.inl.hpp,第1101行
我确定是因为Size()结构引发了异常,因为如果我将 Size(before.rows,before.cols)更改为 before.rows, before.cols ,效果很好!
我无法弄清楚出什么问题了,但是所有教程都说我尝试的代码是可以的代码。
答案 0 :(得分:0)
发生此异常是因为我以错误的顺序在Size()中设置了宽度和高度。 正确的顺序为 cv :: Size(图像的宽度(cols)_of,图像的高度(行)_of_image)
对于许多教程而言,这并不是问题,因为它们通常使用方形图像。