opencv 读取文件路径的问题
是在试运行别人的代码
一直报错
代码如下
import os
import cv2 as cv
import numpy as np
#读取蒙版
def read_mask(filepath_mask, H, V):
masks = []
for mask_name in os.listdir(filepath_mask): # 遍历每一张图片
name = filepath_mask + '/' + mask_name
mask = cv.imread(name)
# mask = np.reshape(mask, (H, 3 * V))
masks.append(mask)
# except:
# print("无法打开文件!", mask_name)
return masks
def read_img(filename_img):
imgs_list = []
for img_name in os.listdir(filename_img):
try:
img = cv.imread(filename_img + '/' + img_name)
imgs_list.append(img)
except:
print('无法打开图片:',img_name)
return imgs_list
#########image_vir_points全部改成image_inpainting###############
#视差图像的读取、裁剪、放大
def deal_img(H, V, image_inpainting):
img_list = []
# ##############复制一下图片_2##############
# image_1 = image_inpainting[0]
# image_2 = image_inpainting[1]
# image_points = []
# for i in range(7):
# image_points.append(image_1)
# for i in range(7):
# image_points.append(image_2)
# for i in range(7):
# image_points.append(image_1)
# for i in range(7):
# image_points.append(image_2)
# #######################################
# ##############复制一下图片_4##############
# image_1 = image_inpainting[0]
# image_2 = image_inpainting[1]
# image_3 = image_inpainting[2]
# image_4 = image_inpainting[3]
# image_points = []
# for i in range(7):
# image_points.append(image_1)
# for i in range(7):
# image_points.append(image_2)
# for i in range(7):
# image_points.append(image_3)
# for i in range(7):
# image_points.append(image_4)
# #######################################
# # ##############复制一下图片_7##############
# image_1 = image_inpainting[0]
# image_2 = image_inpainting[1]
# image_3 = image_inpainting[2]
# image_4 = image_inpainting[3]
# image_5 = image_inpainting[4]
# image_6 = image_inpainting[5]
# image_7 = image_inpainting[6]
# image_points = []
# for i in range(4):
# image_points.append(image_1)
# for i in range(4):
# image_points.append(image_2)
# for i in range(4):
# image_points.append(image_3)
# for i in range(4):
# image_points.append(image_4)
# for i in range(4):
# image_points.append(image_5)
# for i in range(4):
# image_points.append(image_6)
# for i in range(4):
# image_points.append(image_7)
# # #######################################
# ##############复制一下图片_14##############
image_1 = image_inpainting[0]
image_2 = image_inpainting[1]
image_3 = image_inpainting[2]
image_4 = image_inpainting[3]
image_5 = image_inpainting[4]
image_6 = image_inpainting[5]
image_7 = image_inpainting[6]
image_8 = image_inpainting[7]
image_9 = image_inpainting[8]
image_10 = image_inpainting[9]
image_11 = image_inpainting[10]
image_12 = image_inpainting[11]
image_13 = image_inpainting[12]
image_14 = image_inpainting[13]
image_points = []
for i in range(2):
image_points.append(image_1)
for i in range(2):
image_points.append(image_2)
for i in range(2):
image_points.append(image_3)
for i in range(2):
image_points.append(image_4)
for i in range(2):
image_points.append(image_5)
for i in range(2):
image_points.append(image_6)
for i in range(2):
image_points.append(image_7)
for i in range(2):
image_points.append(image_8)
for i in range(2):
image_points.append(image_9)
for i in range(2):
image_points.append(image_10)
for i in range(2):
image_points.append(image_11)
for i in range(2):
image_points.append(image_12)
for i in range(2):
image_points.append(image_13)
for i in range(2):
image_points.append(image_14)
# #######################################
k = 0
for img in image_points: # 遍历每一张图片
# for img in image_inpainting: # 遍历每一张图片
img = np.array(img)
img = img[86:995, :, :] #裁剪图片
h = int(img.shape[0])
v = int(img.shape[1])
Mh = H / h
Mv = V / v
img_resized = cv.resize(img, dsize=None, fx=Mh, fy=Mv, interpolation=cv.INTER_LINEAR) # 双线性插值
img_BGR = np.reshape(img_resized, (H, 3 * V))
temp = img_BGR
img_list.append(temp)
cv.imwrite('./expand_imgs/img_%d.png' % (k), img_resized)
k = k + 1
return img_list
##################################################################
#采样得到合成图片
def sampling(masks,img_list,H,V):
tem_list = []
image = np.zeros((H, 3 * V))
for num in range(28):
temp = masks[num]
temp = temp[0:H,0:V]
temp = np.reshape(temp, (H, 3 * V))
mask = np.uint8(temp / np.max(temp))#归一化
img_tem = np.multiply(mask,img_list[num])
tem_list.append(img_tem)
for num in range(28):
image = image + tem_list[num]
image = image.reshape(H, V, 3)
cv.imwrite("./image_synthesis/jx_kz_14.bmp",image)
if __name__ == '__main__':
V = 3840 # eval(input("输入合成图像的宽度:"))
H = 2160 # eval(input("输入合成图像的高度: "))
filepath_mask = "./masks"
filename_img = './database_forshow/jx_kz_14'
masks = read_mask(filepath_mask, H, V)
imgs_list = read_img(filename_img)
img_list = deal_img(H, V, imgs_list) # image_vir_points改成inpainted_images
sampling(masks, img_list, H, V)
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
根据您提供的截图和代码,报错信息是 cv2.error: OpenCV(4.5.3) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-wzv0w6q3\opencv\modules\imgcodecs\src\loadsave.cpp:732: error: (-215:Assertion failed) !_img.empty() in function 'cv::imread'
,这表明 cv2.imread()
函数无法读取指定的文件路径。
实际上,您的代码中指定的文件路径可能存在问题。您可以尝试使用绝对路径来确保代码可以找到图像文件。例如,如果您的图像文件在 D:\img
目录下,您可以使用如下代码:
img_path = r'D:\img\example.jpg' # 使用 r 字符串避免转义字符的影响
img = cv.imread(img_path)
另外,您可以使用 os.path
模块来构建文件路径,以避免因为操作系统的不同而导致路径分隔符不一致的问题。例如:
import os
img_dir = r'D:\img'
img_name = 'example.jpg'
img_path = os.path.join(img_dir, img_name)
img = cv.imread(img_path)
请确保您的代码中指定的文件路径是正确的,包括文件名和后缀名。如果仍然存在问题,请检查一下文件权限和文件格式是否正确。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
1.卸载当前的opencv,用conda重装或者用pycharm里面的Package管理功能重装。如果有用则大功告成,没用的话继续。
2.按住ctrl,点击cv2,pycharm会跳转到cv2模块下的__init__.py,此时如图所示。注意此时__init__.py文件是应该空白的。此时打开上方文件路径中cv2文件夹的位置,删除cv2文件夹。
3.删除项目路径下的.idea文件夹
4.重新用pycharm打开该项目,此时pycharm会重新加载python包,等待加载完成即可恢复cv2的代码补全功能。
此时如果在次按住ctrl点击cv2,打开cv2下的__init__.py文件,你会发现所有的已经变成上图所示。
1.关于OpenCV在Pycharm中读取文件路径问题的解决方法:
修改解释器路径,重新引入opencv包。
网格搜索结合交叉验证的实现过程:
在scikit-learn中,利用GridSearchCV函数实现网格搜索结合交叉验证。具体实现过程如下:
参考代码如下:
from sklearn.model_selection import GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
# 创建一个KNN分类器实例
knn = KNeighborsClassifier()
# 定义要调整的参数字典
param_grid = {'n_neighbors': range(1, 20)}
# 进行网格搜索并交叉验证
grid_search = GridSearchCV(knn, param_grid, cv=5)
grid_search.fit(X_trainval, y_trainval)
# 输出最佳的参数和准确率
print('网格搜索结合交叉验证,验证集下的最佳准确率、最佳k值:', grid_search.best_score_, grid_search.best_params_)
# 输出测试集上的准确率
grid_search.score(X_test, y_test)
python的opencv读取的时候最好不要带中文,空格,特殊字符。
另外,根据你的截图,你的图片如果是在imgs_list这个文件夹下面一层的话(注意,仅下面一层),你这里的路径给错了。这回导致os.listdir的结果错误,是一个文件夹路径而不是你要的图片列表,所以你的deal_img函数返回为空列表,但是你下面又对这个空列表进行取下标动作,就会越界报错
filename_img = './database_forshow/jx_kz_14/imgs_list'