Failure to use adaptiveThreshold: CV_8UC1 in function adaptiveThreshold

Question:

I have used openCV python and encountered an error.

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()

but I received:

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

Do I have to install something else?

Asked By: PhuongHoang

||

Answers:

you should load your file like this

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

and after that

adaptiveThreshold(src, dst, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 75, 10);
Answered By: sam

The problem is that you are trying to use adaptive thresholding to an image that is not in greyscale. And the function only works with a greyscale images.

So you have to convert your image to a greyscale format as it is described in documentation.

They read the image in a greyscale format with: img = cv2.imread('dave.jpg',0). You can also convert it to greyscale with: img_grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Answered By: Salvador Dali

you can change the code to slightly like this :

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)

just by adding (‘uint8’) while blurring has resolved my issue.

Answered By: Vaibhav K

Try to add cv2.IMREAD_GRAYSCALE in the second parameter of imread

img = cv2.imread(File_path, cv2.IMREAD_GRAYSCALE)

Answered By: Yazen WAKED

you have to imread your image in grayscale, so use the code below:

image = imread('address', 0)

0 exchange the channel of image to grayscale

Answered By: Aram.rt

Convert the image to grayscale before thresholding:

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_blur = cv2.medianBlur(img_gray,5)
img_thresh_Gaussian = cv2.adaptiveThreshold(img_blur, 255,
        cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
Answered By: Rostam

To solve this issue, you need to load grayscale image using 0(zero) as another parameter than the image path.
img = cv2.imread(imagepath, 0)

OR
img = cv2.imread(imagepath, cv2.IMREAD_GRAYSCALE)

Answered By: Vilas
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.