error: (-215:Assertion failed) (depth == CV_8U || depth == CV_32F) && _img.dims() <= 2 in function 'cv::matchTemplate'等opencv踩過的坑


第一種報錯:error: (-215:Assertion failed) (depth == CV_8U || depth == CV_32F) && type == _templ.type() && _img.dims() <= 2 in function 'cv::matchTemplate'

出現在使用matchTemplate()時,比如:

cv.matchTemplate(roi,digitROI,cv.TM_CCOEFF)

解決方法修改模板圖片為RGB,如下

digitROI = cv.cvtColor(digitROI, cv.COLOR_BGR2RGB)

再次運行,程序不再報錯可以成功運行,實測只有模板圖像需要修改,roi圖像不需要改變也可以

 

第二種錯誤:ValueError: not enough values to unpack (expected 3, got 2)

 

 錯誤原因是opencv4.0以上的版本中findcontours函數將不會再返回3個參數,而只返回contours和hierarchy兩個返回值

解決,去掉一個返回值就可以了,或者將你的opencv版本號降下去

contours , hierarchy = cv.findContours(group,cv.RETR_EXTERNAL,cv.CHAIN_APPROX_SIMPLE)

第三種錯誤:error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'

這種錯誤一般就是你的圖片路徑錯誤,或者圖片格式錯誤,還有   別用中文命名,不然也會報這個錯誤

 

第四個坑:使用sobel算子一定別忘了做絕對值處理和歸一化,不然結果相差甚遠

比如左圖是未做絕對值處理和歸一化,右圖是做了的,最下面的圖是只做歸一化未做絕對值

 

 做法

gradX = cv.Sobel(tophat,cv.CV_32F,dx=1,dy=0,ksize=-1)
gradX = np.absolute(gradX)
(minVal, maxVal) = (np.min(gradX), np.max(gradX))
gradX = (255 * ((gradX - minVal) / (maxVal - minVal)))
gradX = gradX.astype("uint8")
cvshow(gradX)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM