所以我很难理解为什么我在访问图像的下一个col /行中的指针时从opencv得到这个断言错误。让我告诉你发生了什么,并提供一些代码。
cv::Mat
或一个较大cv::Mat
部分的标题。 我构建了一些指针来访问我的ROI值。因此,假设我的ROI填充了像素值,并且是3x3 Mat
with the following Dimensions (index starting at 0,0)
---------
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |
首先,我需要初始化指针,分别指向他们的位置。我通过ptr
获取了cv::Mat
的{{1}}函数及其在网格中的位置。
面临的问题:
当我尝试访问下一个邻居的像素时,我收到一个断言错误。
我的诊断:
该守则的一部分:
cv::Point
运行时ASSERTION FAILED:OpenCV错误:断言失败(y == 0 ||< data&& dims> = 1&&(unsigned)y<(unsigned)size.p [ 0]))在cv :: Mat :: ptr中,文件// ...表示头文件mat.hpp的路径//第428行
我无法指出这个问题,请你帮忙。在使用指针和像素时,请给我一些知识,以防我误解了某些内容。
谢谢
答案 0 :(得分:0)
试试这个
for(int j = 1; j < ROI.rows ; j++){
auto current = ROI.ptr<uchar>(maxCoord.y);
auto neighbor_down = ROI.ptr<uchar>(maxCoord.y+1); //THE PROB IS HERE according to debugging
auto neighbor_up = ROI.ptr<uchar>(maxCoord.y-1);
cv::Point poi ; //point of interest
cv::Point bordess(Point(0,0));
for(int i= 0; i < ROI.cols; i++){
switch(maxCoord.x){ //PROOF FOR LOGIC
case 0:
if(maxCoord.y == 0){ //another switch statement maybe ??
diff1 = std::abs(current[maxCoord.x+1] - current[maxCoord.x]);
diff2 = std::abs(neighbor_down[maxCoord.x] - current[maxCoord.x]);
if(diff2 > diff1){
cv::Point(maxCoord.x,maxCoord.y+1) = poi & bordess;
} else {
cv::Point(maxCoord.x+1,maxCoord.y) = poi & bordess;
}
};
答案 1 :(得分:0)
好的,基本上我发现由于输入图像的性质,我的指针定义是错误的。我已经对图像进行了一些预处理,并且内部值的范围从uchar
更改为其他值。当我将auto neighbor_down = ROI.ptr<uchar>(maxCoord.y+1);
更改为auto neighbor_down = ROI.ptr<float>(maxCoord.y+1);
时,一切正常。