【发布时间】:2022-01-24 00:35:00
【问题描述】:
我查看了很多来源,但没有找到如何加载我的 .bmp 数据。
这是我的一张图像预测代码。这是有效的。
import cv2
import numpy as np
print('model{}'.format(r'C:\directory\model_best.pth'))
opencv_net = cv2.dnn.readNetFromONNX('resnet50.onnx')
input_img = cv2.imread('image.bmp')
gray = cv2.cvtColor(input_img, cv2.COLOR_BGR2GRAY)
img2 = np.zeros_like(input_img)
img2[:, :, 0] = gray
img2[:, :, 1] = gray
img2[:, :, 2] = gray
cv2.imwrite('image.bmp', img2)
scale = 1 / 255
input_blob = cv2.dnn.blobFromImage(
image=img2,
scalefactor=scale,
size=(224, 224),
)
preproc_img=input_blob
opencv_net.setInput(preproc_img)
out = opencv_net.forward()
print("OpenCV DNN prediction: \n")
print("* shape: ", out.shape)
test_class_id = np.argmax(out)
confidence = out[0][test_class_id]
print("* class ID: {}".format(test_class_id))
print("* confidence: {:.4f}".format(confidence))
但我必须使用我的测试图像文件夹中的所有 bmp 图像。我使用这些代码来使用我的 .bmp 图像文件夹:
IMG_WIDTH=224
IMG_HEIGHT=224
img_folder=r'C:\directory\test'
def create_dataset(img_folder):
img_data_array = []
class_name = []
for dir1 in os.listdir(img_folder):
for file in os.listdir(os.path.join(img_folder, dir1)):
image_path = os.path.join(img_folder, dir1, file)
image = cv2.imread(image_path, cv2.COLOR_BGR2GRAY)
image = cv2.resize(image, (IMG_HEIGHT, IMG_WIDTH), interpolation=cv2.INTER_AREA)
image = np.array(image)
image = image.astype('float32')
image /= 255
img_data_array.append(image)
class_name.append(dir1)
return img_data_array, class_name
img_data, class_name =create_dataset(img_folder)
target_dict={k: v for v, k in enumerate(np.unique(class_name))}
print(target_dict)
target_val= [target_dict[class_name[i]] for i in range(len(class_name))]
print(len(target_val))
这给出了:
cv2.error: OpenCV(4.5.4) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\resize.cpp:4051: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize
当我将调整大小的行放在评论中时,我这样做了:
print('model : {}'.format(r'C:\directory\model_best.pth'))
opencv_net = cv2.dnn.readNetFromONNX('resnet50.onnx')
img_dat_array=np.asarray(img_data)
img_dat_array=np.asarray(img_data)
print(img_dat_array)
input_blob = cv2.dnn.blobFromImage(
image=img_dat_array,
size=(224, 224),
)
这给了我img_data_array empty :[nan nan nan ... nan nan nan]
这是与 png 文件相同的代码(它 作品)https://colab.research.google.com/drive/1Z8HrvDuVuhJWMr6-KXjO-UXzou0-V30O?usp=sharing
【问题讨论】:
-
你那里有空的图像文件吗?所有文件都失败了吗?
-
是的,先生,我没有空文件,我也用 png 文件检查了我的代码,以检查我的代码是否真的有效,然后它就没有问题了。但是bmp图像有问题。 colab.research.google.com/drive/…
-
您使用的文件名不正确。试试
print(image_path)在cv2.imread()之前就行了 -
你能从imread打印输入字符串吗?也许第一个文件不是您的 bmp 文件夹的图像,而是您的 png 文件夹的图像?
-
@MarkSetchell print(image_path) 我做到了,我正确地得到了所有 2512 个图像文件:C:\Users\murat\OneDrive\Masaüstü\papsmear\test\0\01085.bmp C:\Users \murat\OneDrive\Masaüstü\papsmear\test\0\NL_10_ (11).bmp C:\Users\murat\OneDrive\Masaüstü\papsmear\test\0\NL_10_ (12).bmp.......