【发布时间】:2016-12-23 12:56:40
【问题描述】:
我正在尝试在 OpenCV 中编写用于图像分割的代码。作为图像处理的一部分,我正在尝试使用 Sobel 滤波器检测测试图像的边缘。
为了找到 dX 和 dY 方向上的梯度大小,我正在计算两个梯度的欧几里得距离。但是当我运行代码时,我得到了上述错误。我知道当我尝试“访问”内存中不可用的位置时会发生上述错误,但我确信我已经在我的代码中定义了所有Mat。
这是我的代码的一部分。
//Blur the raw image to remove noise
GaussianBlur(src, src, kernel, 2);
//Run sobel edge detector
Sobel(src, edgeX, src.depth(), 1, 0);
Sobel(src, edgeY, src.depth(), 0, 1);
edge = Mat::zeros(317,554,CV_8UC1);
for (int r = 0; r < edgeX.rows; r++)
{
for (int c = 0; c < edgeY.cols; c++)
{
edge.at<double>(r,c) = sqrt((edgeX.at<double>(r,c)*edgeX.at<double>(r,c)) + (edgeY.at<double>(r,c)*edgeY.at<double>(r,c)));
}
}
地点:
-
src: RGB 测试图 -
edgeX: 带有 dX 梯度的 sobel 输出 -
edgeY: 带有 dY 的 sobel 输出
-
edge: 是欧几里得距离的Mat。
我在这一行得到错误
edge.at<double>(r,c) = sqrt((edgeX.at<double>(r,c)*edgeX.at<double>(r,c)) + (edgeY.at<double>(r,c)*edgeY.at<double>(r,c)));
尝试访问edge.at<double>(316,395)时
我该如何调试呢? 我做错了什么?
【问题讨论】:
标签: c++ opencv debugging pointers