【发布时间】:2020-07-13 01:13:01
【问题描述】:
我正在尝试加载包含 5k 图像的数据集,但出现此错误:
image = cv2.resize(image2, (224, 224))
TypeError: Expected Ptr<cv::UMat> for argument 'src'
但是当我只放一张图片时,一切正常。
最后一个问题:当加载了如此多图像的数据集时,是否有可能以某种方式将它们的特征(从我正在使用的滑动窗口)保存在多个 CSV 文件中?例如:fashion1.png --> fashion1.csv, fashion2.png --> fashion2.csv, ... fashion5000.png --> fashion5000.csv?
import cv2
import matplotlib.pyplot as plt
import numpy as np
#image2 = cv2.imread("fashion1.png")# your image path
image2 = r"C:\Users\John\Desktop\new\fashion\img\*.png"
image = cv2.resize(image2, (224, 224))
tmp = image # for drawing a rectangle
stepSize = 20
(w_width, w_height) = (60, 60 ) # window size
for x in range(0, image.shape[1] - w_width, stepSize):
for y in range(0, image.shape[0] - w_height, stepSize):
window = image[x:x + w_width, y:y + w_height, :]
cv2.rectangle(tmp, (x, y), (x + w_width, y + w_height), (255, 0, 0), 2)
plt.imshow(np.array(tmp).astype('uint8'))
plt.show()
mean_values=[]
mean_val, std_dev = cv2.meanStdDev(image)
mean_val = mean_val[:3]
mean_values.append([mean_val])
mean_values = np.asarray(mean_values)
mean_values2 = mean_values.reshape(1,3)
result = mean_values2.flatten()
print(result)
for i in range(len(result)):
result_file = open('fashion1.csv', 'a')
result_file.write("{}{}".format(result[i], '\n'))
【问题讨论】:
-
发布有关产生异常的代码的问题时,请始终包含完整的 Traceback - 复制并粘贴它,然后将其格式化为代码(选择它并键入
ctrl-k)。有机会为您的问题制作minimal reproducible example 吗? -我们当然无权访问r"C:\Users\John\Desktop\new\fashion\img\*.png"。 -
cv2 文档对
.resize的src参数有什么看法?它应该是一个字符串吗? -
看起来
cv2.resize()不接受包含通配符的src参数……这并不奇怪。我认为您需要在for循环中单独处理它们,使用glob.glob()或os.listdir()之类的东西来获取每个文件名。 -
resize()需要在内存中加载图像而不是文件名 - 并且 cv2 无法使用*打开文件,但您必须使用os.listdir()或glob.glob()获取所有文件名并用于 -循环分别打开每个文件并与resize()一起使用 -
是的,可以单独保存
.csv——当你打开fashion1.png时,你也可以使用这个名字来创建名字fashion1.csv,和其他名字一样。