gpt4 book ai didi

c++ - OpenCV 像素访问指针与 at() - 不同的值

转载 作者:太空宇宙 更新时间:2023-11-03 22:42:07 25 4
gpt4 key购买 nike

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

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::ptr n 元素也匹配您的列:

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));
}
}
}

关于c++ - OpenCV 像素访问指针与 at() - 不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52276778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com