看板 Python 關於我們 聯絡資訊
目前寫一個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://www.ptt.cc/bbs/Python/M.1594822669.A.DC8.html
LP9527: 去看看那隻cpp 07/16 00:45
yao99: 先檢查圖片有沒有讀到 07/16 04:42
s1010257: 我要照他的路徑沒看到cpp這隻檔案 07/16 17:25
s1010257: 我測試圖片有讀到,可是唯獨到imwrite就會出現問題,有 07/16 17:27
s1010257: 用try和expect去測試 07/16 17:27
s1010257: except 07/16 17:30
gmccntzx1: source: https://git.io/JJGQ9 這行在檢查要寫出的 07/16 22:09
gmccntzx1: 資料 _img 是不是空的陣列。所以原因應該在 catch.py 07/16 22:11
gmccntzx1: 裡面。檢查一下為了取得 `cropImg` 而找出的 `x1`, 07/16 22:15
gmccntzx1: `y1`, `hight`, `width` 哪個是造成 07/16 22:16
gmccntzx1: `img[y1:y1+hight, x1:x1+width]` 為空的原因。 07/16 22:17
gmccntzx1: 題外話: 根據你給的部分程式碼,`x2 == x1+width`,所 07/16 22:22
gmccntzx1: 以寫成 `x1:x1+width` 是不是多此一舉? `y2` 同理 07/16 22:24
gmccntzx1: 找到一個可能的根本原因。你去看一下 minAreaRect 的 07/16 22:42
gmccntzx1: 說明,它有提到回傳的 rotatedRect 可能包含負數,如 07/16 22:46
gmccntzx1: 這篇問題所示 https://stackoverflow.com/q/47272306 07/16 22:47
gmccntzx1: 上面那篇問題中,用 minAreaRect 找出結果的右上角超出 07/16 22:49
gmccntzx1: 圖片的範圍,也就是該點的 y < 0。 07/16 22:51
gmccntzx1: 所以你要檢查你的圖片是否也會造成這種情況,讓你的 07/16 22:52
gmccntzx1: `x1`, `y1` 變成負數,導致 `img[y1:y2, x1:x2]` 為空 07/16 22:55
s1010257: 確實返回的x值為負的,造成程式返回空值,會再來想想辦 07/17 15:53
s1010257: 法改善然後優化一下,謝謝! 07/17 15:53
gmccntzx1: OK (・ω・)b 07/17 18:59