作者s1010257 (波)
看板Python
標題[問題] imwrite error
時間Wed Jul 15 22:17:47 2020
目前寫一個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程式有問題
爬了文說可能是返回值為空
但實測結果值是有返回的
想請問出現上述的情況比較有可能的原因是什麼?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.140.166.218 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1594822669.A.DC8.html
1F:推 LP9527: 去看看那隻cpp 07/16 00:45
2F:推 yao99: 先檢查圖片有沒有讀到 07/16 04:42
3F:→ s1010257: 我要照他的路徑沒看到cpp這隻檔案 07/16 17:25
4F:→ s1010257: 我測試圖片有讀到,可是唯獨到imwrite就會出現問題,有 07/16 17:27
5F:→ s1010257: 用try和expect去測試 07/16 17:27
6F:→ s1010257: except 07/16 17:30
8F:→ gmccntzx1: 資料 _img 是不是空的陣列。所以原因應該在 catch.py 07/16 22:11
9F:→ gmccntzx1: 裡面。檢查一下為了取得 `cropImg` 而找出的 `x1`, 07/16 22:15
10F:→ gmccntzx1: `y1`, `hight`, `width` 哪個是造成 07/16 22:16
11F:→ gmccntzx1: `img[y1:y1+hight, x1:x1+width]` 為空的原因。 07/16 22:17
12F:→ gmccntzx1: 題外話: 根據你給的部分程式碼,`x2 == x1+width`,所 07/16 22:22
13F:→ gmccntzx1: 以寫成 `x1:x1+width` 是不是多此一舉? `y2` 同理 07/16 22:24
14F:→ gmccntzx1: 找到一個可能的根本原因。你去看一下 minAreaRect 的 07/16 22:42
15F:→ gmccntzx1: 說明,它有提到回傳的 rotatedRect 可能包含負數,如 07/16 22:46
17F:→ gmccntzx1: 上面那篇問題中,用 minAreaRect 找出結果的右上角超出 07/16 22:49
18F:→ gmccntzx1: 圖片的範圍,也就是該點的 y < 0。 07/16 22:51
19F:→ gmccntzx1: 所以你要檢查你的圖片是否也會造成這種情況,讓你的 07/16 22:52
20F:→ gmccntzx1: `x1`, `y1` 變成負數,導致 `img[y1:y2, x1:x2]` 為空 07/16 22:55
21F:→ s1010257: 確實返回的x值為負的,造成程式返回空值,會再來想想辦 07/17 15:53
22F:→ s1010257: 法改善然後優化一下,謝謝! 07/17 15:53
23F:→ gmccntzx1: OK (・ω・)b 07/17 18:59