闲来无事,最近做一点新东西.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时,作者遇到读取.png图片失败的问题。经过一系列尝试和查找资料,发现是图片格式问题,OpenCV在处理.png时需要其以RGB格式编码。解决方案是将图片转码为JPG格式,或者在读取前转换图片编码。之后,作者能够成功读取并处理图片。
2028

被折叠的 条评论
为什么被折叠?



