Adaptive Threshold error: (-215:Assertion failed) src.type() == CV_8UC1 in function 'adaptiveThreshold'
Adaptive Threshold error: (-215:Assertion failed) src.type() == CV_8UC1 in function 'adaptiveThreshold'
我正在研究预训练的 vgg16 模型,为此我需要将图像文件的输入大小设置为 (224,224,3)。
我正在处理的代码是:
from tensorflow.keras.preprocessing import image
import cv2
import matplotlib.pyplot as plt
img = image.load_img('abc.jpg',target_size=(224,224))
img = image.img_to_array(img)
print(img.shape)
## output : (224,224,3)
img_grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#plt.imshow(img_grey)
th3 = cv2.adaptiveThreshold(img_grey,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)
plt.figure(figsize=(20,10))
plt.imshow(th3)
error Traceback (most recent call last)
<ipython-input-88-2a8a27b965ed> in <module>
17 #plt.imshow(img_grey)
18
---> 19 th3 = cv2.adaptiveThreshold(img_grey,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)
20 plt.figure(figsize=(20,10))
21 plt.imshow(th3)
error: OpenCV(4.1.0) /io/opencv/modules/imgproc/src/thresh.cpp:1627: error: (-215:Assertion failed) src.type() == CV_8UC1 in function 'adaptiveThreshold'
帮我解决问题。
cv2.adaptive_threshold
需要 dtype uint8
:
的输入数组
img_grey = img_grey.astype(np.uint8)
th3 = cv2.adaptiveThreshold(img_grey...
错误说明了解决方案:src.type() == CV_8UC1
意味着您需要将图像类型设置为 uint8
source
因此,如果您重新定义 img
变量:
img = image.img_to_array(img, dtype='uint8')
问题会解决,但我有一个问题。
为什么要定义下面的语句?
img_grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
你怎么知道 load_img
以 BGR
方式加载图像?
我们知道 opencv 以 BGR
方式加载图像 cv2.imread
。
该说法是错误的,因为load_img
加载RGB
格式的图像source
因此正确的说法是:
img_grey = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
或者你可以这样做:
img = image.load_img('15f8U.png', grayscale=True, target_size=(224, 224))
正确代码:
from keras.preprocessing import image
import cv2
import matplotlib.pyplot as plt
img = image.load_img('15f8U.png', grayscale=True, target_size=(224, 224))
img = image.img_to_array(img, dtype='uint8')
print(img.shape)
## output : (224,224,3)
#plt.imshow(img_grey)
th3 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)
plt.figure(figsize=(20,10))
plt.imshow(th3, cmap="gray")
plt.show()
我正在研究预训练的 vgg16 模型,为此我需要将图像文件的输入大小设置为 (224,224,3)。
我正在处理的代码是:
from tensorflow.keras.preprocessing import image
import cv2
import matplotlib.pyplot as plt
img = image.load_img('abc.jpg',target_size=(224,224))
img = image.img_to_array(img)
print(img.shape)
## output : (224,224,3)
img_grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#plt.imshow(img_grey)
th3 = cv2.adaptiveThreshold(img_grey,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)
plt.figure(figsize=(20,10))
plt.imshow(th3)
error Traceback (most recent call last)
<ipython-input-88-2a8a27b965ed> in <module>
17 #plt.imshow(img_grey)
18
---> 19 th3 = cv2.adaptiveThreshold(img_grey,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)
20 plt.figure(figsize=(20,10))
21 plt.imshow(th3)
error: OpenCV(4.1.0) /io/opencv/modules/imgproc/src/thresh.cpp:1627: error: (-215:Assertion failed) src.type() == CV_8UC1 in function 'adaptiveThreshold'
帮我解决问题。
cv2.adaptive_threshold
需要 dtype uint8
:
img_grey = img_grey.astype(np.uint8)
th3 = cv2.adaptiveThreshold(img_grey...
错误说明了解决方案:src.type() == CV_8UC1
意味着您需要将图像类型设置为 uint8
source
因此,如果您重新定义 img
变量:
img = image.img_to_array(img, dtype='uint8')
问题会解决,但我有一个问题。
为什么要定义下面的语句?
img_grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
你怎么知道 load_img
以 BGR
方式加载图像?
我们知道 opencv 以 BGR
方式加载图像 cv2.imread
。
该说法是错误的,因为load_img
加载RGB
格式的图像source
因此正确的说法是:
img_grey = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
或者你可以这样做:
img = image.load_img('15f8U.png', grayscale=True, target_size=(224, 224))
正确代码:
from keras.preprocessing import image
import cv2
import matplotlib.pyplot as plt
img = image.load_img('15f8U.png', grayscale=True, target_size=(224, 224))
img = image.img_to_array(img, dtype='uint8')
print(img.shape)
## output : (224,224,3)
#plt.imshow(img_grey)
th3 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)
plt.figure(figsize=(20,10))
plt.imshow(th3, cmap="gray")
plt.show()