windows目录下python版本的opencv使用imwrite保存图片的问题

23 篇文章 1 订阅
20 篇文章 5 订阅

使用python版本的opencv保存从视频文件中抽取出来的图像帧,就是在磁盘上看不到图片文件。进过测试,发现imwrite的参数中若包括了windows目录的磁盘路径(如D:)则无法保存成功。

程序一:

cap = cv2.VideoCapture("D:/项目/video/front.avi")

index = 0
while (cap.isOpened()):
    ret, frame = cap.read()
    cv2.imshow('iframe', frame)
    
     
    cv2.imwrite(str(index)+".jpg", frame)
    index += 1

    if index > 10:
        break

程序一可以在当前目录保存图片,但是无法指定目录。


程序二:

cap = cv2.VideoCapture("D:/项目/video/front.avi")

index = 0
while (cap.isOpened()):
    ret, frame = cap.read()
    cv2.imshow('iframe', frame)
    
   
    cv2.imwrite("D:/项目/video/" + str(index)+".jpg", frame)
    index += 1

    if index > 10:
        break

程序二无法在指定目录生成图片,磁盘上没保存任何jpg文件

程序三:

cap = cv2.VideoCapture("D:/项目/活体检测/python_liveness/video/front.avi")

index = 0
pwd = os.getcwd()
os.chdir("D:/项目/活体检测/python_liveness/video/")
while (cap.isOpened()):
    ret, frame = cap.read()
    cv2.imshow('iframe', frame)
    cv2.imwrite(str(index)+".jpg", frame)

    index += 1

    if index > 10:
        break
os.chdir(pwd)

 程序三可以在指定目录保存图片。

 

程序四:

cap = cv2.VideoCapture("D:/项目/活体检测/python_liveness/video/front.avi")

index = 0

while (cap.isOpened()):
    ret, frame = cap.read()
    cv2.imshow('iframe', frame)
    cv2.imwrite("video/" + str(index)+".jpg", frame)

    index += 1

    if index > 10:
        break

程序四可以在指定相对目录生成图片。

个人怀疑是“D:”字符的原因。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
OpenCV 中,当使用 imwrite 保存图像时,如果图像的宽度和高度之和超过 65535 像素,则会发生此错误。这是因为 OpenCV 在保存图像时使用 16 位无符号整数来表示图像的宽度和高度,因此最大值为 65535。 解决这个问题的一种方法是将图像分成多个较小的部分,分别保存后再合并。具体步骤如下: 1. 将图像分成多个部分:可以使用 numpy 库中的 hsplit 和 vsplit 函数将图像水平或垂直分割成多个部分。 2. 分别保存每个部分:对于每个部分,使用 imwrite 函数将其保存为单独的文件。可以将这些文件保存在同一个文件夹中。 3. 合并部分:使用 numpy 库中的 hstack 和 vstack 函数将部分合并为一个完整的图像。 下面是一个示例代码,演示了如何将图像拆分并保存为多个文件,最后再合并为一个完整的图像: ```python import cv2 import numpy as np import os # 读取图像 img = cv2.imread('large_image.jpg') # 将图像分成多个部分 rows, cols, _ = img.shape split_size = 60000 h_splits = np.arange(0, rows, split_size) v_splits = np.arange(0, cols, split_size) # 分别保存每个部分 for i in range(len(h_splits)-1): for j in range(len(v_splits)-1): h1, h2 = h_splits[i], h_splits[i+1] w1, w2 = v_splits[j], v_splits[j+1] img_part = img[h1:h2, w1:w2, :] filename = f'large_image_{i}_{j}.jpg' cv2.imwrite(filename, img_part) # 合并部分 img_parts = [] for i in range(len(h_splits)-1): row_parts = [] for j in range(len(v_splits)-1): filename = f'large_image_{i}_{j}.jpg' img_part = cv2.imread(filename) row_parts.append(img_part) os.remove(filename) # 删除临时文件 img_row = np.hstack(row_parts) img_parts.append(img_row) img_final = np.vstack(img_parts) # 保存完整图像 cv2.imwrite('large_image_final.jpg', img_final) ``` 希望这个示例可以帮助你解决问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值