gpt4 book ai didi

c++ - OpenCV:内存位置问题

转载 作者:行者123 更新时间:2023-11-28 06:27:39 25 4
gpt4 key购买 nike

我刚刚安装了 opencv 2.4.10。我使用免费版的 visual studio。它编译 opencv 命令,我能够在窗口上显示我的计算机摄像头输入。但是,似乎任何访问 Mat 对象中的值的尝试都失败了。如果我开始(例如):

Mat M;
M.create(4, 4, CV_8UC(2));

我可以看到 M 不为空但是:

double b = M.at<double>(0, 0);

结果:myOpenCVStudy.exe 中 0x75C92F71 处的未处理异常:Microsoft C++ 异常:内存位置 0x006AECD4 处的 std::bad_alloc。

int a = countNonZero(M);

结果:myOpenCVStudy.exe 中 0x75C92F71 处的未处理异常:Microsoft C++ 异常:内存位置 0x00ADF868 处的 cv::Exception。

和:

cout << "M = " << endl << " " << M << endl << endl;

结果:myOpenCVStudy.exe 中 0x734ADE19 (msvcp100.dll) 的未处理异常:0xC0000005:访问冲突读取位置 0x00000000。

对于第二种情况,我收到“未加载符号”。关于 C:\Windows\SysWoW64\KernelBase.dll 的一些信息。说我需要更改 PDB 和二进制搜索路径(Microsoft 符号服务器),这是如何完成的。

感谢您的帮助,

谢谢,

亚尔

最佳答案

创建 Mat 时,通过将 CV_8UC(2) 传递给 create 功能:

M.create(4, 4, CV_8UC(2));

尝试通过转换为 double 来访问 8 个字节 导致问题:

double b = M.at<double>(0, 0);

因此,您需要使用适当的结构进行访问,例如 Vec2b ,其中包含两个 8 位字节:

Vec2b b = M.at<Vec2b>(0, 0);

现在您可以访问两个 channel 中的每一个的值:

unsigned char uCH1 = b[0];
unsigned char uCH2 = b[1];

countNonZero 崩溃的原因可能是因为 according to the documentation ,它期望单 channel 输入,而不是双 channel 输入。在 Debug模式下运行应该会产生适当的断言。

如果您真的确实想要 double 的单 channel 图像,只需在创建它时将类型更改为CV_64F即可:

Mat M;
M.create(4, 4, CV_64F);

double b = M.at<double>(0, 0);

int a = countNonZero(M);

关于c++ - OpenCV:内存位置问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28233211/

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