web-dev-qa-db-fra.com

Échec d'utilisation de adaptiveThreshold: CV_8UC1 dans la fonction adaptiveThreshold

J'ai utilisé openCV python et j'ai rencontré une erreur.

img_blur = cv2.medianBlur(self.cropped_img,5)
img_thresh_Gaussian = cv2.adaptiveThreshold(img_blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

plt.subplot(1,1,1),plt.imshow(img_thresh_Gaussian, cmap = 'gray')
plt.title("Image"), plt.xticks([]), plt.yticks([])
plt.show()

mais j'ai reçu:

cv2.error: /home/phuong/opencv_src/opencv/modules/imgproc/src/thresh.cpp:1280: error: (-215) src.type() == CV_8UC1 in function adaptiveThreshold

Dois-je installer autre chose?

14
PhuongHoang

vous devriez charger votre fichier comme ça 

src.create(rows, cols, CV_8UC1);
src = imread(your-file, CV_8UC1);

et après ça 

adaptiveThreshold(src, dst, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 75, 10);
12
sam

Le problème est que vous essayez d'utiliser le seuillage adaptatif pour une image qui n'est pas en niveaux de gris. Et la fonction ne fonctionne qu'avec des images en niveaux de gris.

Vous devez donc convertir votre image au format en niveaux de gris, comme indiqué dans documentation .

Ils lisent l'image au format niveaux de gris avec: img = cv2.imread('dave.jpg',0). Vous pouvez également le convertir en niveaux de gris avec: img_grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

59
Salvador Dali

vous pouvez changer le code légèrement comme ceci:

img_blur = cv2.medianBlur(self.cropped_img,5).astype('uint8')
img_thresh_Gaussian = cv2.adaptiveThreshold(img_blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

simplement en ajoutant ('uint8') alors que le flou a résolu mon problème.

2
Vaibhav K