前提・実現したいこと
python、opencvを先月より始めたものです。
画像をしきい値処理したいため、 cv2.adaptiveThreshold 関数を使用しようと思い、OpenCVのサイトから適応的閾値処理を使ったのですが、img = cv2.medianBlurの部分でエラーが出てしまいます。
エラー表示を見てもいまいちよくわからないため教えていただけると幸いです。
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- error Traceback (most recent call last) <ipython-input-17-e7dd8c5ce3da> in <module> 4 5 img = cv2.imread('g_2.4flat09944.jpg',0) ----> 6 img = cv2.medianBlur(img,5) 7 8 ret,th1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY) error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-9d_dfo3_\opencv\modules\imgproc\src\median_blur.dispatch.cpp:283: error: (-215:Assertion failed) !_src0.empty() in function 'cv::medianBlur'
該当のソースコード
python
1 2import cv2 3import numpy as np 4from matplotlib import pyplot as plt 5 6img = cv2.imread('g_2.4flat09944.jpg',0) 7img = cv2.medianBlur(img,5) 8 9ret,th1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY) 10th2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,\ 11 cv2.THRESH_BINARY,11,2) 12th3 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\ 13 cv2.THRESH_BINARY,11,2) 14 15titles = ['Original Image', 'Global Thresholding (v = 127)', 16 'Adaptive Mean Thresholding', 'Adaptive Gaussian Thresholding'] 17images = [img, th1, th2, th3] 18 19for i in xrange(4): 20 plt.subplot(2,2,i+1),plt.imshow(images[i],'gray') 21 plt.title(titles[i]) 22 plt.xticks([]),plt.yticks([]) 23plt.show()
試したこと
"g_2.4flat09944.jpg"は、ガンマ補正と適応的ヒストグラム平坦化の処理を行った後の画像だったのでそれが原因かと思い、処理をしていない画像を読み込んでみましたが、それでもエラー内容は同じでした。
念のため、ガンマ補正とヒストグラム平坦化のコードも載せておきます。
python
1import cv2 2import sys 3import numpy 4import matplotlib.pyplot as plt 5%matplotlib inline 6plt.gray() 7 8img = cv2.imread('DSC09944.jpg',0) 9 10def create_gamma_img(gamma, img): 11 gamma_cvt = np.zeros((256,1), dtype=np.uint8) 12 for i in range(256): 13 gamma_cvt[i][0] = 255*(float(i)/255)**(1.0/gamma) 14 return cv2.LUT(img, gamma_cvt) 15img_ganma = create_gamma_img(2.4,img) 16plt.imshow(img_ganma) 17 18clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8)) 19cl1 = clahe.apply(img_ganma) 20img_flat = cv2.imwrite("g_2.4flat09944.jpg",cl1) 21
補足情報(FW/ツールのバージョンなど)
anaconda JupyterLab
回答2件
あなたの回答
tips
プレビュー