opencv 学习中的问题

文章讲述了在使用OpenCV处理Mat数据时遇到的错误,涉及Mat迭代器的使用和多通道读取问题。作者解决了MatIterator在多通道数据上的错误,并提到在安装opencvcontrib时遇到的库文件问题,最终通过升级到opencv4.7.0并调整C++语言版本兼容性来解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

读取Mat数据

通过迭代器访问Mat类矩阵中的元素

错误提示:0x00007FFD5C714FFC 处(位于 learn about opencv.exe 中)有未经处理的异常: Microsoft C++ 异常: cv::Exception,位于内存位置 0x000000A45F16EFD0 处。

分析:错误主要出现在迭代器MatIterator的begin 中,在网上搜索了Mat迭代器模板类对象Mat迭代器模板类对象 - 迷途小菜鸟 - 博客园 (cnblogs.com)

发现了主要错误是在读取多通道数据的时候直接在begin里写的是uchar,这种应该是单通道的读取方式,像我定义的3通道,应该是Vec3b这种读取方式

修改后成功~实现矩阵中每一个元素的遍(但是指针具体应该怎么使用我还是不清楚)

安装opencv contrib里踩坑

无法打开文件opencv_word410d.lib

一路解决下来都不行,索性直接安装了opencv4.7.0,这个里面直接就有sift函数,不需要再安装contrib了(搞了一天搞不明白,我恨)

 struct NameCompare: std::binary_function <const char *, const char *, bool>这个函数反复出错!

应该是C++语言版本比较低的问题,我安装的opencv是4.1.0,安装在VS2022上就巨多问题,还是选择版本差不多的安装

struct NameCompare: std::binary_function <const char *, const char *, bool>
{
    bool
    operator () (const char *x, const char *y) const
    {
    return strcmp (x, y) < 0;
    }
};

直接把这段代码替换成: 

struct NameCompare {
    bool operator()(const char* x, const char* y) const {
        return strcmp(x, y) < 0;
    }
};

这个函数就不再报错,很多报错的函数都是这个原理,因此C++语言版本不匹配的问题 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值