OpenCV4.4.0 imread()读取图片失败

在使用OpenCV 4.4.0时,作者遇到读取.png图片失败的问题。经过一系列尝试和查找资料,发现是图片格式问题,OpenCV在处理.png时需要其以RGB格式编码。解决方案是将图片转码为JPG格式,或者在读取前转换图片编码。之后,作者能够成功读取并处理图片。

闲来无事,最近做一点新东西.OpenCV图像处理库
中间的过程可以忽略,解决办法在总结(原谅我不会打锚点)

一:打开图像

img = cv2.imread('路径', 0)

二:展示图像

cv2.imshow(img)
结果直接报错了:
TypeError: imshow() missing required argument 'mat' (pos 2)
参数没传全啊,看资料是传了一个字符串,难道展示图片还要有一个名字吗?
加上呗
cv2.imshow('img', img)
又报错了:
cv2.error: OpenCV(4.4.0) ..\modules\highgui\src\window.cpp:376: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'网上说这是一种路径编写错了,但是他们是该了读图的路径.所以这个展示是展示本地存储的图片?好像是这么回事,那我在程序中处理的图片就不能直接看了呗?糊里糊涂…
那第二个参数传图片的对象参数又解释不了了啊,继续看资料吧
找了又找还是没有办法,估计是版本不兼容的问题吧…
到此结束谢谢!

补:

在百度首页搜到了自己的文章还是蛮尴尬的,而且还写的这么水…
所以,找到了问题所在:我的img没拿到数据
具体参考大佬的文章:
https://www.cnblogs.com/fahaihappy/p/12541560.html
没有错,我的img为None.因此又得去看imread()函数了.
按照大佬说的是我的图片路径写错了,但是我也没中文呀,难道要用反斜杠?还是绝对路径?
先在相对路径下试试:
首先排除法,单反斜杠肯定不行 ? 的确不行
双反斜杠:不行
斜杠:不行
双斜杠:不可以
绝对路径:
反斜杠:不行
双反斜杠:不行
斜杠:不行
双斜杠:还是不行
找到一个文章说是可能是因为Windows权限的问题?这让我在Python中怎么改啊…
不如试试pillow…我实在没办法了…头发又少了一根
结果参数类型不统一…
讲道理我Image.open()可以用的imread()用不了?救救孩子吧…
难道是路径中下划线的原因吗…并不是
接着在底层代码中看到一个这个:Portable Network Graphics - \*.png (see the *Note* section)可能是.png格式文件的错吧.但是我还就不信了…
搞不出来你?

'''
The function determines the type of an image by the content, not by the file extension.
    .   -   In the case of color images, the decoded images will have the channels stored in **B G R** order.
    .   -   When using IMREAD_GRAYSCALE, the codec's internal grayscale conversion will be used, if available.
    .       Results may differ to the output of cvtColor()
    .   -   On Microsoft Windows\* OS and MacOSX\*, the codecs shipped with an OpenCV image (libjpeg,
    .       libpng, libtiff, and libjasper) are used by default. So, OpenCV can always read JPEGs, PNGs,
    .       and TIFFs. On MacOSX, there is also an option to use native MacOSX image readers. But beware
    .       that currently these native image loaders give images with different pixel values because of
    .       the color management embedded into MacOSX.
'''

解释也说读*.png的文件是可以的呀,这我就萌币了…
longlong later 看到了大佬的文章:https://blog.youkuaiyun.com/qq_41498261/article/details/105232854
大佬说把扣扣输入法换掉…我人傻了,来自萌新的呆萌,这都被大哥知道了?
我就说嘛,怎么能这么玄幻…依旧不行
https://blog.youkuaiyun.com/Magician0619/article/details/87882688
这个大佬也是这么说的,和输入法有关…
但是他说了一个可能正确的原因:更严格的图片格式,我的.png打不开了?
我换了JPG也不行啊…我哭了T_T
突然灵机一动,难道是数字?没有用
窝头炸了…
我怀疑是我的解释器出现了问题…重新创建一个文件看看,果然也是没有关系的.
那还有什么原因…
我看了一下我的图片来源格式,网页提示是image/gif,难道我图片是gif的?依旧没有用啊
最后一个可能就是图片的通道什么的不是按BGR的顺序弄的?这个我也不是很懂啊…先这样吧…悄悄隐藏了,不然没搞出来很尴尬的
我又回来啦,术士要删掉什么lib,你让我conda怎么搞?还不是硬着头皮搞!说删就删,都是心酸.(开玩笑的,Python不能删lib)
然后找到了这篇文章:https://blog.youkuaiyun.com/ll523587181/article/details/79611828
感觉是不谋而合了,因此开始想办法用Image转码图片
我太难了…读出来了

总结

本人环境pycharm3.9吧,Python38,OpenCV4.4.0(从conda下的)
*.png的图片读取失败了,要转码成JPG格式的图片才能读取.因为这种格式下图片的编码方式是RGB,这样OpenCV才能识别.
因此对于我的图片需要两步操作.将PNG图片重新编码为RGB格式,然后让OpenCV读取
后记:自从转了RGB被读取成功之后,仿佛被打通了任督二脉,即使这张图片转回PNG还是能被读取出来…我也是很萌币,此时此刻,我想吟诗一首,萌币树上萌币果,萌币树下你和我.萌币树前排排坐,一人一个萌币果.skr~

### OpenCV 4.4.0 版本特性 OpenCV 4.4.0 是一个专为64位 Windows 10 系统设计并针对 Visual Studio 2019 构建的发行版,该版本不仅包含了 opencv_contrib 扩展模块以提供更多功能选项,而且集成了 CUDA 10.1 支持来实现 GPU 加速计算[^1]。 对于深度学习的支持也是这一版本的一大亮点,它允许用户加载和执行各种预训练好的神经网络模型。此外,“opencv440”压缩包内含有预先编译完成的库文件、必要的头文件以及配置文件,使得开发者能够迅速将其融入自己的开发环境中。 ### 安装指南 为了安装 OpenCV 4.4.0,在拥有适当的操作系统环境(即 Win10 和 VS2019)的前提下: 下载完成后解压 "opencv440.zip" 文件至目标目录;接着设置系统的 PATH 变量指向 bin 文件夹路径以便于命令行调用 DLLs;最后通过 CMake 或者其他工具链将项目链接到 OpenCV 库即可。 ```bash setx OPENCV_DIR "C:\path\to\your\opencv440" ``` 请注意上述指令中的 `C:\path\to\your\` 需要替换为你实际存放 OpenCV 的位置。 ### 使用教程概览 当成功安装好之后就可以开始编写基于 Python 或 C++ 的程序了。下面是一个简单的例子展示如何读取图片并显示出来: #### Python 示例代码 ```python import cv2 as cv img = cv.imread('example.jpg') cv.imshow('Image', img) cv.waitKey(0) cv.destroyAllWindows() ``` 这段脚本会打开一张名为 'example.jpg' 的图像,并创建窗口用于查看这张图直到按下任意键关闭所有窗口。 #### C++ 示例代码 ```cpp #include <opencv2/opencv.hpp> using namespace cv; int main() { Mat image; image = imread("example.jpg"); namedWindow("Display window", WINDOW_AUTOSIZE); imshow("Display window", image); waitKey(0); // Wait for a keystroke in the window return 0; } ``` 以上展示了基本操作流程,更多高级特性和 API 文档可以参阅官方文档获得进一步指导。 ### 下载资源 可以从官方网站或其他可信源处获取 OpenCV 4.4.0 的分发包。“opencv440.zip” 中已经打包好了所需的一切组件,方便快捷地应用于个人或商业用途中。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值