[問題] 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