断言在与 opencv 的像素比较中失败
Assertion failed on pixel comparison with opencv
我正在尝试将图像的各个像素与特定值进行比较,但是我在"if"语句中有一个断言失败的异常(删除"if"都有效)。
这段代码是:
Sobel(gray, grad_x, CV_16S, 1, 0, 3, 1, 0, BORDER_DEFAULT);
convertScaleAbs(grad_x, abs_grad_x);
addWeighted(abs_grad_x, 1, 0, 1, 0, grad);
Mat imfiltered = Mat::zeros(grad.size(), grad.type());
//Find and extract shape
for (i = 20; i < (grad.cols-20); i++) {
for (j = 20; j < (grad.rows-20); j++) {
if (grad.at<char>(i, j) >= 40) {
imfiltered.at<char>(i, j) = grad.at<char>(i, j);
}
else {
imfiltered.at<char>(i, j) = 0;
}
}
}
问题出在if (grad.at<char>(i, j) >= 40)
声明上。
和错误:
Assertion failed ((unsigned)i0 < (unsigned)size.p[0]) in cv::Mat::at
这种说法有什么问题?我怎样才能正确地完成这个比较?
提前谢谢。
你倒置了行和列。由于先迭代行然后迭代列的速度更快,因此您需要将循环更改为:
for (int i = 20; i < (grad.rows-20); i++) {
for (int j = 20; j < (grad.cols-20); j++) {
...
也:
-
grad
可能是一个CV_16SC1
,所以你需要使用grad.at<short>(...)
- 您可以使用
cv::threshold
而不是循环 - 呼吁
addWeighted
可能毫无用处。第三个参数应该是另一个图像。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++ TCP 服务器比较字符串失败
- SuperLu和LaPack的比较在与犰狳进行基准测试时失败
- 标准::元组成员逐个成员比较失败
- C 拖拖与原始角色的比较失败
- 假定相同的字符串之间的比较失败' == '比较
- 断言在与 opencv 的像素比较中失败
- Gtest在零附近的C++浮点比较失败
- 使用比较函数对引用类型失败
- 从txt文件中读取行后字符串比较失败
- 使用下标运算符进行Integer Vector元素比较失败,但使用at函数成功
- 矢量比较失败
- 字符串比较失败-C++
- 逻辑比较在不应该C++时失败
- 比较测试失败:unorder_map上的[]操作符产生的参数数量错误
- 字符串比较在c++中失败
- 比较具有相同持续时间的两个std::chrono::time_points失败
- 为什么我在double和c++之间的比较失败
- 字符串==字符串比较失败的原因
- 为什么这个迭代器比较失败