尝试访问直方图的值时,我在C++ OpenCV中遇到Assert失败((elemSize()== sizeof(_Tp))[已关闭]

2ul0zpep  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(213)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
2天前关闭。
Improve this question
当我尝试访问灰度图像生成直方图的bin值时,我遇到此Assert失败:
错误:第943行cv::Mat::at ... opencv2\core\mat.inl.hpp中的Assert失败(元素大小()==大小(_Tp))
以下是引发故障的代码片段:

for (int i = 0; i < 256; i++) {
        
        hist.at<float>(i) = (hist.at<float>(i) / pixelAmount) * 255;
        
    }

我的主要问题是我并不真正理解与Assert失败相关的问题
我查找了Histogram Calculation的OpenCV文档,他们以同样的方式访问直方图值。
提前感谢您的建议

7vux5j2d

7vux5j2d1#

我假设您从另一个API调用中获得了histMat,因此它的类型在创建时不会受到影响。
at<T>()方法要求您知道Mat的元素类型(比如CV_8U),并在访问中使用相同的类型(uint8_t)。
有两种方法可以解决这种情况:
1.获取标量值(uint8_t),转换标量值使其适合您的计算,写回(uint8_t)强制值
1.将整个Mat转换为CV_32F,它等效于float,然后执行操作
第一种选择:

for (int i = 0; i < 256; i++) {
    hist.at<uint8_t>(i) =
        (static_cast<float>(hist.at<uint8_t>(i)) / pixelAmount) * 255;
}

第二种选择:

hist.convertTo(hist, CV_32F);
// now do your calculations with at<float>()

相关问题