【问题标题】:can't read bmp images from folder ,OpenCV (python) [closed]无法从文件夹中读取 bmp 图像,OpenCV(python)[关闭]
【发布时间】: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.......

标签: python opencv


【解决方案1】:

只需换行:

image = cv2.imread(image_path, cv2.COLOR_BGR2GRAY)

与:

image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)

【讨论】:

  • 我不明白我的图像文件夹的问题出在哪里,我在函数 'cv::resize' 中得到了“(-215:Assertion failed) !ssize.empty()”但是当我使用它可以工作的 png 文件
  • @Muratali016 你试过换线吗?
  • 是的,我做到了,我得到了这个错误:-215:Assertion failed) !ssize.empty() in function 'cv::resize
  • @Muratali016 会不会是bmp文件不是bmp文件,而是伪装成一个?例如该文件的格式不同,但有人给它扩展名为 bmp。
猜你喜欢
  • 1970-01-01
  • 2013-05-18
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 2016-01-26
  • 2021-05-15
  • 2017-11-23
  • 1970-01-01
相关资源
最近更新 更多