[问题] imwrite error

楼主: s1010257 (波)   2020-07-15 22:17:47
目前写一个main.py的程式去读取catch.py
catch.py的功能主要是用来做图像处理的程式
main.py就让他批量去引图片处理完的结果
程式流程大概如图
https://i.imgur.com/xewHiPf.jpg
可是回传结果我用imwrite将图片存下
前几张图片确实有存下来,
可是到第9张图的时候他就出现以下错误
https://i.imgur.com/rCHxSwN.jpg
error: (-215:Assertion failed) !_img.empty() in function 'cv::imwrite'
当我把有问题的第9张图删掉就没这问题,
只是跑到后面第xx张图片又有同样状况,
想说是不是图片本身的问题
但我单独拿有问题的图片到catch.py做图像处理,
结果又是正常的
我把imwrite先注解掉就没有出现报错的问题
1000多张图片也有正常返回图片的数值
https://i.imgur.com/2jIH5wD.jpg
目前怀疑是imwrite程式有问题
爬了文说可能是返回值为空
但实测结果值是有返回的
想请问出现上述的情况比较有可能的原因是什么?
作者: LP9527 (ㄊㄇ抽菸都去)   2020-07-16 00:45:00
去看看那只cpp
作者: yao99 (yao)   2020-07-16 04:42:00
先检查图片有没有读到
楼主: s1010257 (波)   2020-07-16 17:25:00
我要照他的路径没看到cpp这只档案我测试图片有读到,可是唯独到imwrite就会出现问题,有用try和expect去测试except
作者: gmccntzx1 (o.O)   2020-07-16 22:09:00
source: https://git.io/JJGQ9 这行在检查要写出的资料 _img 是不是空的阵列。所以原因应该在 catch.py里面。检查一下为了取得 `cropImg` 而找出的 `x1`,`y1`, `hight`, `width` 哪个是造成`img[y1:y1+hight, x1:x1+width]` 为空的原因。题外话: 根据你给的部分程式码,`x2 == x1+width`,所以写成 `x1:x1+width` 是不是多此一举? `y2` 同理找到一个可能的根本原因。你去看一下 minAreaRect 的说明,它有提到回传的 rotatedRect 可能包含负数,如这篇问题所示 https://stackoverflow.com/q/47272306上面那篇问题中,用 minAreaRect 找出结果的右上角超出图片的范围,也就是该点的 y < 0。所以你要检查你的图片是否也会造成这种情况,让你的`x1`, `y1` 变成负数,导致 `img[y1:y2, x1:x2]` 为空
楼主: s1010257 (波)   2020-07-17 15:53:00
确实返回的x值为负的,造成程式返回空值,会再来想想办法改善然后优化一下,谢谢!
作者: gmccntzx1 (o.O)   2020-07-17 18:59:00
OK (・ω・)b

Links booklink

Contact Us: admin [ a t ] ucptt.com