OpenCV 像素访问点与 at() - 不同的值



我在尝试访问像素时遇到了奇怪的行为,如下所示:

void Dbscan::regionQuery(int i, int j, std::vector<Point>* res) const {
// check rect. grid around center point
const size_t row_min = std::max(0, i-eps_);
const size_t row_max = std::min(n_rows_, i+eps_+1);
const size_t col_min = std::max(0, j-eps_);
const size_t col_max = std::min(n_cols_, j+eps_+1);
assert(masked_img_.depth() == CV_8UC1);
for (int m = row_min; m<row_max; ++m) {
const uchar* mask_ptr = masked_img_.ptr(m);
for (int n = col_min; n<col_max; ++n) {
assert(*mask_ptr == masked_img_.at<uchar>(m, n));
if (masked_img_.at<uchar>(m, n) == 255) {
res->emplace_back(Point(m,n));
}
mask_ptr++;
}
}

基本上,所示的第二个断言失败了,我对正在发生的事情一无所知。有没有人知道如何最好地调试上述问题?

最好的问候

费利克斯

cv::Mat::ptr返回一个指向参数中行开头的指针,该指针是此行第一列中元素的地址。cv::Mat::at从参数返回对行和列中元素的引用。在您的代码中,行匹配,但列不匹配(除非您的col_min计算结果为 0(,因此您需要将指针从cv::Mat::ptrn元素中移出以匹配您的列:

for (int m = row_min; m<row_max; ++m) {
const uchar* mask_ptr = masked_img_.ptr(m);
for (int n = col_min; n<col_max; ++n) {
assert(*(mask_ptr + n) == masked_img_.at<uchar>(m, n));
if (masked_img_.at<uchar>(m, n) == 255) {
res->emplace_back(Point(m,n));
}
}
}

相关内容

  • 没有找到相关文章

最新更新