iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >error: (-215:Assertion failed)的两种解决方案
  • 514
分享到

error: (-215:Assertion failed)的两种解决方案

python开发语言 2023-09-02 13:09:36 514人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

问题描述:在对视频分帧读取进行差值哈希算法比较时出现读取错误现象,具体代码内容和报错如下: import osimport cv2import numpy as npimport subprocessimport matplotlib.py

问题描述:在对视频分帧读取进行差值哈希算法比较时出现读取错误现象,具体代码内容和报错如下:

import osimport cv2import numpy as npimport subprocessimport matplotlib.pyplot as pltos.chdir(r'e:/users/may')#固定工作文件路径v_path='ghz.mp4'image_save='./pic/' #新建一个所有图片的文件cap=cv2.VideoCapture(v_path)frame_count=cap.get(cv2.CAP_PROP_FRAME_COUNT)for i in range(int(frame_count)):    _,img=cap.read()    cv2.imwrite(r'./pic/image{}.jpg'.format(i),img) #用img代替{}def dHash(img):    img=cv2.resize(img,(9,8))    gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)    hash_str=''    for i in range(8):                for j in range(8):            if gray[i,j]>gray[i,j+1]:                hash_str=hash_str+'1'            else:                hash_str=hash_str+'0'    return hash_str#遍历pic中所有图片,比较前后张图片相似度,画图diff=[]_,img1=cap.read()for i in range(int(frame_count)-1):    _,img2=cap.read()    hash1=dHash(img1)    hash2=dHash(img2)    n=cmpHash(hash1,hash2)    diff.append(n)    img1=img2x=np.arange(0,len(diff),1)print(len(x))print(len(diff))plt.plot(x,diff,'g-')plt.show()
---------------------------------------------------------------------------error         Traceback (most recent call last)~\AppData\Local\Temp/ipykernel_11856/1932059239.py in      32 for i in range(int(frame_count)-1):     33     _,img2=cap.read()---> 34     hash1=dHash(img1)     35     hash2=dHash(img2)     36     n=cmpHash(hash1,hash2)~\AppData\Local\Temp/ipykernel_11856/1932059239.py in dHash(img)     16      17 def dHash(img):---> 18     img=cv2.resize(img,(9,8))     19     gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)     20     hash_str=''error: OpenCV(4.6.0) D:\a\opencv-python\opencv-Python\opencv\modules\imgproc\src\resize.cpp:4052: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'

而在差值哈希算法运行前,均值哈希算法可以正常运行:

import osimport cv2import numpy as npimport matplotlib.pyplot as pltdef aHash(img):    img=cv2.resize(img,(8,8))    gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)    hash_str=''    avg=np.mean(gray)    for i in range(8):        for j in range(8):            if gray[i,j]>avg:                hash_str=hash_str+'1'            else:                hash_str=hash_str+"0"    return hash_strdef cmpHash(hash1,hash2):    n=0    if len(hash1)!=len(hash2):        return -1    for i in range(len(hash1)):        if hash1[i]!=hash2[i]:            n=n+1    n=n/len(hash1)    return nos.chdir(r'e:/users/may')#固定工作文件路径v_path='ghz.mp4'if not os.path.exists("./images"):    os.mkdir("./images")imge_save='./images'cap=cv2.VideoCapture(v_path)frame_count=cap.get(cv2.CAP_PROP_FRAME_COUNT)print(frame_count)diff=[]_,img1=cap.read()for i in range(int(frame_count)-1):    _,img2=cap.read()    hash1=aHash(img1)    hash2=aHash(img2)    n=cmpHash(hash1,hash2)    diff.append(n)    if n>0.3:        #print(n)        cv2.imwrite(r'./images/image{}.jpg'.fORMat(i),img1)    #print(i)    img1=img2x=np.arange(0,len(diff),1)print(len(x))print(len(diff))plt.plot(x,diff,'r-')plt.show()

反复仔细观察上述两段代码之后判断是img图片路径读取失败,下方为两种解决方法:

删除报错语句的下方部分:

for i in range(int(frame_count)):    _,img=cap.read()    cv2.imwrite(r'./pic/image{}.jpg'.format(i),img) #用img代替{}

将循环调用的部分加入地址限制:

import osimport cv2import numpy as npimport subprocessimport matplotlib.pyplot as pltdef dHash(img):    img=cv2.resize(img,(9,8))    gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)    hash_str=''    for i in range(8):                for j in range(8):            if gray[i,j]>gray[i,j+1]:                hash_str=hash_str+'1'            else:                hash_str=hash_str+'0'    return hash_str#遍历pic中所有图片,比较前后张图片相似度,画图diff1=[]for i in range(int(frame_count)-1):    img1=cv2.imread('./pic/image{}.jpg'.format(i))    img2=cv2.imread('./pic/image{}.jpg'.format(i+1))    hash1=dHash(img1)    hash2=dHash(img2)    n=cmpHash(hash1,hash2)    diff1.append(n)    x1=np.arange(0,len(diff1),1)print(len(x1))print(len(diff1))plt.plot(x1,diff1,'g-')plt.show()

值得注意的是如果需要用cap.read()读取图片,一定不能缺少以下语句:

cap=cv2.VideoCapture(v_path)frame_count=cap.get(cv2.CAP_PROP_FRAME_COUNT)

但是如果用cv2.imread就无需

来源地址:https://blog.csdn.net/yin20020606/article/details/127235580

--结束END--

本文标题: error: (-215:Assertion failed)的两种解决方案

本文链接: https://www.lsjlt.com/news/390826.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作