pycharm OpenCV 读取文件路径的问题

opencv 读取文件路径的问题
是在试运行别人的代码
一直报错

img


文件夹如下

img

img

代码如下

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)

请确保您的代码中指定的文件路径是正确的,包括文件名和后缀名。如果仍然存在问题,请检查一下文件权限和文件格式是否正确。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7799149
  • 你也可以参考下这篇文章:pycharm--opencv报错&解决
  • 除此之外, 这篇博客: pycharm OpenCV代码补全失效解决方法中的 解决方法: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 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文件,你会发现所有的已经变成上图所示。

     

  • 您还可以看一下 一桥老师的python-opencv图像处理(基础课程)课程中的 课程一角(学完就有能力做这些)小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    1.关于OpenCV在Pycharm中读取文件路径问题的解决方法:

    • 首先确认报错信息,确定问题是出在读取文件路径上;
    • 其次查看文件夹结构,确保文件存在及路径正确;
    • 检查代码,确认是否有相对路径,如果是,尝试替换成绝对路径;
    • 在Pycharm中重新下载opencv包,并在已经安装好库的环境中打开;
    • 修改解释器路径,重新引入opencv包。

    • 网格搜索结合交叉验证的实现过程:

    在scikit-learn中,利用GridSearchCV函数实现网格搜索结合交叉验证。具体实现过程如下:

    • 设定调参的参数和参数的取值范围,将其定义到一个字典中;
    • 定义KNeighborsClassifier(或其他分类器)的实例;
    • 利用GridSearchCV函数进行交叉验证,fit数据集;
    • 输出最佳准确率和最佳参数。

    参考代码如下:

    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'