专栏首页贾志刚-OpenCV学堂震惊 | OpenCV的bug吗?我又发现了一个?

震惊 | OpenCV的bug吗?我又发现了一个?

大家好,最近我一直写东西,结果无意中我又有了新发现,这次主要是针对OpenCV中Mat对象的创建。常见的Mat对象创建方式主要包括几下几种:

// create Mat - 1
Mat m1(4, 4, CV_8UC1, Scalar(255));
std::cout << "m1:\n" << m1 << std::endl;
// create Mat - 2
Mat m2(Size(4, 4), CV_8UC3, Scalar(0, 0, 255));
std::cout << "m2:\n" << m2 << std::endl;
// create Mat - 3
Mat m3(Size(4, 4), CV_8UC3, Scalar::all(255));
std::cout << "m3:\n" << m3 << std::endl;
// create Matlab风格 - 4
Mat m4 = Mat::zeros(Size(4, 4), CV_8UC3);
std::cout << "m4:\n" << m4 << std::endl;
// create Matlab风格 - 5
Mat m5 = Mat::ones(Size(4, 4), CV_8UC3);
std::cout << "m5:\n" << m5 << std::endl;

以前我经常写的代码是:

// create Matlab风格 - 5
Mat m5 = Mat::ones(Size(4, 4), CV_8UC1);
std::cout << "m5:\n" << m5 << std::endl;

发现工作良好,全部初始化为1,那天我也不知道自己怎么想的,就想创建一个三通道全是1的:

// create Matlab风格 - 5
Mat m5 = Mat::ones(Size(4, 4), CV_8UC3);
std::cout << "m5:\n" << m5 << std::endl

结果就得到上面的图。三通道中只有1个通道被初始化为1,其它居然还是0,我觉得我要检查一下以前写的代码,我记得我写了很多这种创建方式。这个是不是OpenCV挖下的一个大坑啊!

最后,我是在OpenCV4.2版本上发现的,后来我又让别人也测试了一下,发现之前版本也是一样!我居然才发现!我晕!居然从来没有人写过这个,关注过这个!

后来我在官方的API文档上找到了这句话:

In case of multi-channels type, only the first channel will be initialized with 1's, the others will be set to 0's.

后记:我一直想被Mat::ones误导至今!绝知此事要躬行!

本文分享自微信公众号 - OpenCV学堂(CVSCHOOL),作者:gloomyfish

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Mat对象与它各种用法

    学习OpenCV大家都会遇到一个对象叫做Mat,此对象非常神奇,支持各种操作。很多初学者因此被搞得头晕脑胀,它各种用法太多台杂,搞得初学者应接不暇,感觉有心无力...

    OpenCV学堂
  • 教程 | OpenCV Grabcut对象分割

    Grabcut是基于图割(graph cut)实现的图像分割算法,它需要用户输入一个bounding box作为分割目标位置,实现对目标与背景的分离/分割,这个...

    OpenCV学堂
  • OpenCV3.3深度学习模块(DNN)应用-图像分类

    DNN模块介绍 在OpenCV3.3版本发布中把DNN模块从扩展模块移到了OpenCV正式发布模块中,当前DNN模块最早来自Tiny-dnn,可以加载预先训练好...

    OpenCV学堂
  • 正确的Win主机网站伪静态设置方法

    在这两天折腾主题的过程中,再次注意到伪静态的设置,之前刚建站时用的是最简单的404 错误重定向的方法:复制代码,新建成一个 404.php 丢到 web 根目录...

    张戈
  • Java发送邮件初窥

      最近朋友的公司有用到这个功能,之前对这一块也不是很熟悉,就和他一起解决出现的异常的同时,也初窥一下使用Apache Common Email组件进行邮件发送...

    阿豪聊干货
  • compression功能测试

    compression功能测试 1.启动compression 功能描述: 1.目前从k版本开始支持compression,目前支持zlib、snappy、zs...

    用户1260683
  • 小程序+直播迸发新可能,小程序直播行业玩法解析

    在去年的12月 26 日,就在微信小游戏推出的前两天,实时音视频录制及播放能力升级。开发者在小程序自建后台服务或接入任意的云服务后,实现单向、双向甚至多向的音频...

    微宝阁
  • 复旦大学提出中文分词新方法,Transformer连有歧义的分词也能学

    本文经机器之心(微信公众号:almosthuman2014)授权转载,禁二次转载

    数说君
  • 复旦大学提出中文分词新方法,Transformer连有歧义的分词也能学

    从不同的角度看待中文句子,可能使中文分词任务(CWS)的标准完全不同。例如「总冠军」既可以看成独立的词,也能理解为「总」和「冠军」两个词。以前这种情况非常难解决...

    机器之心
  • 手写Tomcat

    笔者称自己手写的Tomcat为盗版,反之则为正版。在手写简易版Tomcat之前,我们来看看如何使用正版的Tomcat

    晚上没宵夜

扫码关注云+社区

领取腾讯云代金券