python 使用opencv读取图片,解决cv2.error: OpenCV(4.1.0) C:\projects\opencv-python\opencv....报错

完整代码如下:

# -*- coding: utf-8 -*-
# @Time    : 2019/5/27 19:24
# @Author  : 未来战士biubiu!!
# @FileName: code.py

import cv2  # 引入opencv模块
import serial  # 串口模块

import os
os.chdir('D:\DOCUMENT/U1/Python3_Demo/TRunk_tools/QY\data')

import cv2  # 引入opencv模块



def ON_Figure():
    jpg = cv2.imread('hhh.jpg')  # 加载文件路径下的hhh图片
    cv2.imshow('picture', jpg)  # 显示图片,窗口名:picture,数据来源为jpg
    print(jpg)  # 打印jpg内的数据
    cv2.waitKey(0)  # 无限延时,如果出问题就,(x)就留空,x大于0,就延时x毫秒

ON_Figure()

运行结果如下:

在这里插入图片描述

首先检查文件路径是否正确

文件路径一般为英文的,中文的可以试一下会不会报错,我的全英文没问题的,而且网上说什么文件路径必须得全部/ 但是我的文件路径就是\是不会报错的,如下,只是包含特定转义字符的时候比如\U的时候需要转换成/U。

在这里插入图片描述

如果保证文件路径没有错误的情况下,请检查你的图片格式。我网上下的jpg格式是可以正常读取的,但是当我转化为png 就会报错!所以第二个原因就是你图片的格式问题。

<think>好的,用户遇到了OpenCV的resize函数报错,错误信息是error: (-215:Assertion failed) !ssize.empty() in function ‘cv::resize‘。我需要帮他分析原因并提供解决方案。首先,这个错误通常是因为输入图像为空或者尺寸不合法导致的。根据引用中的信息,可能的原因有几个方面: 首先,检查图像路径是否正确。用户可能提供的路径不存在或者拼写错误,导致cv2.imread无法读取图像,返回None。这时候传给resize就会出错。需要确认路径是否正确,并且使用绝对路径或检查相对路径的基准目录是否正确。 其次,图像文件可能损坏或者格式不支持。比如虽然文件扩展名是.jpg或.png,但实际文件内容损坏,或者并不是图片文件。例如,用户可能不小心将其他类型的文件(如json)放在图像文件夹中,导致读取失败。这时候需要用其他软件尝试打开文件,或者检查文件夹中的文件类型。 接下来,处理损坏文件时,应该在代码中添加检查,确保imread返回的图像不为空。例如,在调用resize之前,先判断image是否为None,如果是的话就跳过或者处理异常。 另外,用户可能在使用某些库(如facefusion)时,视频处理中遇到问题。这时候需要检查视频的每一帧是否有效,或者用ffprobe检查视频的码率等信息,确保视频文件本身没有问题。 最后,总结解决方案,需要从路径、文件完整性、代码健壮性等多个方面入手,确保输入到resize的图像数据是有效的。同时,用户可能需要学习如何调试这类OpenCV错误,比如打印图像形状或检查中间变量。 现在需要将这些思路整理成步骤,用中文清晰说明,并生成相关问题,帮助用户深入理解问题。</think>### OpenCV图像调整大小错误`(-215:Assertion failed) !ssize.empty()`的解决方案 此错误通常由输入图像为空或尺寸无效导致,以下是具体原因和解决方法: --- #### **1. 检查图像路径与文件有效性** - **问题原因**: 使用`cv2.imread()`读取图像时,如果文件路径错误、文件损坏或格式不支持,会返回空矩阵(`None`)。将此空矩阵传递给`cv2.resize()`时触发断言失败[^2][^4]。 - **解决方案**: - 使用绝对路径替代相对路径(避免路径歧义): ```python import cv2 image = cv2.imread(r"D:/images/test.jpg") ``` - 验证文件格式:检查文件扩展名是否为`.jpg/.png`,并用图片查看器确认能否正常打开[^2]。 - 打印图像形状以调试: ```python print(image.shape) # 若输出为None,则说明读取失败 ``` --- #### **2. 处理损坏或非图像文件** - **问题原因**: 文件夹中混入非图像文件(如`.txt`、`.json`),或图像文件本身已损坏。 - **解决方案**: - 清理文件夹中的非图像文件: ```python import os valid_extensions = ['.jpg', '.png', '.jpeg'] files = [f for f in os.listdir('folder') if os.path.splitext(f)[1].lower() in valid_extensions] ``` - 添加空值检查逻辑: ```python if image is not None: resized = cv2.resize(image, (100, 100)) else: print("图像读取失败") ``` --- #### **3. 视频处理中的帧读取问题** - **问题原因**: 处理视频时,某些帧可能因解码失败返回空矩阵(常见于损坏的视频文件)。 - **解决方案**: - 使用`ffprobe`检查视频完整性并获取码率: ```bash ffprobe -v quiet -show_entries stream=bit_rate input.mp4 ``` - 在循环读取视频帧时添加判断: ```python while cap.isOpened(): ret, frame = cap.read() if not ret: break # 处理有效帧 ``` --- #### **4. 代码健壮性优化** 在关键步骤添加防御性编程: ```python # 读取时检查 image = cv2.imread("image.jpg") if image is None: raise ValueError("图像文件未正确加载") # 调整大小时检查尺寸 h, w = image.shape[:2] if h == 0 or w == 0: raise ValueError("图像尺寸无效") resized = cv2.resize(image, (new_w, new_h)) ``` ---
评论 29
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值