最近想实现一个摄像头检测到运动物体就将运动物体照片上传到华为云obs的功能(树莓派识别运动物体代码参照博客树莓派摄像头检测运动物体),代码如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-# 导入必要的软件包
import cv2
from huaweicloud import Load
from concurrent.futures import ThreadPoolExecutorload=Load()#这里是我包装好的上传文件到华为云的类
count=0
count1=0
pool=ThreadPoolExecutor(max_workers=10) #设置一个大小为10的线程池#如果是摄像头的话
camera = cv2.VideoCapture(0) #0表示第一个摄像头
# 初始化当前帧的前帧
lastFrame = Nonedef upload(c):#这里调用的是我包装好的类中的上传文件函数load.upload_file('imag/frame%d.jpg' % c,'/home/pi/Desktop/python代码/imag/frame.jpg')print(c)try:while camera.isOpened():# 读取下一帧(ret, frame) = camera.read()# 调整该帧的大小frame = cv2.resize(frame, (800, 400), interpolation=cv2.INTER_CUBIC)# 结果转为灰度图gray_pic = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)gray_pic = cv2.GaussianBlur(gray_pic,(21, 21),0)# 如果第一帧是None,对其进行初始化if lastFrame is None:lastFrame = gray_piclasFrame = cv2.GaussianBlur(lastFrame, (21, 21), 0)continue# 计算当前帧和前帧的不同frameDelta = cv2.absdiff(lastFrame, gray_pic)# 当前帧设置为下一帧的前帧lastFrame = gray_pic# 图像二值化thresh = cv2.threshold(frameDelta, 25, 255, cv2.THRESH_BINARY)[1]cnts, hierarchy = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)#print(count1)# 遍历轮廓for c in cnts:# 忽略小轮廓,排除误差if cv2.contourArea(c) < 300:continue# 计算轮廓的边界框,在当前帧中画出该框(x, y, w, h) = cv2.boundingRect(c)cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)if count1==0 and count<20:#这里我只上传20张照片cv2.imwrite('/home/pi/Desktop/python代码/imag/frame.jpg',frame)#将图片保存到本地供下面一行代码上传pool.submit(upload,count)#上传图像到华为云count+=1count1+=1if count1==30:#设置上传频率count1=0# 显示当前帧cv2.imshow("frame", frame)#cv2.imshow("frameDelta", frameDelta)#cv2.imshow("thresh", thresh)# 这里一定要有waitKey函数,否则无法显示,如果q键被按下,跳出循环if cv2.waitKey(30) & 0xFF == ord('q'):break# 清理资源并关闭打开的窗口camera.release()cv2.destroyAllWindows()obsClient.close()except:# 清理资源并关闭打开的窗口camera.release()cv2.destroyAllWindows()obsClient.close()

上面代码只能成功执行一次上传,其他上传均报错如下:

self._send_request(method,url,body,headers,encode_chunked)
File “/usr/lib/python3.7/http/client.py”, line 1301, in _send_request
self.putheader(hdr,value)
File “/usr/lib/python3.7/http/client.py”, line 1233,in putheader
values[i] = one_value.encode( ’ latin-1’)
UnicodeEncodeError: ‘latin-1’ codec can’t encode character ‘\u65e5’ in position 0: ordinal not inrange(256)

网上说的各种字符串encode,decode的方法都不好使。经调试发现是代码cv2.imshow语句的问题,在我去掉这行语句后,代码可以正常运行并上传图片。至于为什么这样我也不太清楚,可能是cv2.imshow本身存在的问题:

有大神知道解决方法还请不吝赐教!

cv2.imshow的问题相关推荐

  1. python imshow彩色_python中plt.imshow与cv2.imshow显示颜色问题

    在用plt.imshow和cv2.imshow显示同一幅图时可能会出现颜色差别很大的现象. 这是因为:opencv的接口使用BGR,而matplotlib.pyplot 则是RGB模式 import ...

  2. cv2 imshow窗口大小_cv2.imshow()图片无法显示

    在Pycharm和jupyter notebook中运行cv2.imshow()函数的时候,图片无法正常显示,是因为在运行cv2.imshow()之后,需要使用cv2.waitKey()来保持窗口的显 ...

  3. python多线程没用_Python中的多线程cv2.imshow()不起作用

    我有两个摄像头(使用OpenNI,每个摄像头有两个流,由相同的驱动程序API实例处理),并且想要两个线程,每个线程捕获数据从每个摄像机独立,即驱动程序API的一个实例,说cam_handler,我有两 ...

  4. 【OpenCV 例程200篇】03. 图像的显示(cv2.imshow)

    [OpenCV 例程200篇]03. 图像的显示(cv2.imshow) 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新 ...

  5. OpenCV_ cv2.imshow()

    cv2.imshow() cv2.imShow()函数可以在窗口中显示图像.该窗口和图像的原始大小自适应(自动调整到原始尺寸). 第一个参数是一个窗口名称(也就是我们对话框的名称),它是一个字符串类型 ...

  6. python opencv显示图片一闪而过_解决Opencv+Python cv2.imshow闪退问题

    Opencv+Python cv2.imshow闪退 # 读入原始图像 origineImage = cv2.imread('./pic/6.jpeg') # 图像灰度化 # image = cv2. ...

  7. python灰度图cv2到plt变颜色_python中plt.imshow与cv2.imshow显示颜色问题

    python中plt.imshow与cv2.imshow显示颜色问题 在用plt.imshow和cv2.imshow显示同一幅图时可能会出现颜色差别很大的现象. 这是因为:opencv的接口使用BGR ...

  8. 在ubuntu中使用cv2.imshow()报错 No protocol specified qt.qpa.xcb: could not connect to display :0

    目录 报错 解决方案 1. 更换较低版本的opencv-python 2. 设置X server 报错 在带有桌面的ubuntu 16.04中,使用cv2.imshow()函数,报错信息如下 No p ...

  9. cv2.imshow无法显示图像

    在Pycharm中运行cv.imshow()函数的时候,图形界面闪了一下就消失了. 后来,在Stackoverflow上发现了解决的方法. 原来,在运行cv2.imshow后,需要使用cv2.wait ...

  10. 解决问题:使用cv2.imshow/plt.imshow显示图片正常,但保存下来的图片不正常或者全黑

    今天遇到了一个Bug,花了很大的时间精力解决,在这里记录一下. Bug如题目所说,在对一张渲染出来的图片保存时,发现存成了全黑的图,尝试过将数据归一化/改变数据类型等等方式均失败,然而尝试了用 ope ...

最新文章

  1. 速度提升2倍,超强悍CPU级骨干网络PP-LCNet
  2. python 搭建登陆系统_Django 搭建CMDB系统完整[1](用户登录)
  3. 底部菜单 点击突起_iOS开发之上下文交互菜单(UIContextMenuInteraction)
  4. python hexdigest,Java方法,可以为Hex中的HMAC-SHA256提供与Python方法相同的输出
  5. 【开源组件】一份值得收藏的的 MySQL 规范
  6. Shell脚本编程30分钟入门
  7. JAVA 版本微信公众管理开源项目招募伙伴
  8. Deprecated: Function ereg_replace() is deprecated
  9. 更小的模型,迈向更快更环保的NLP
  10. generator tar.gz file in windows
  11. 资管新规这样规定,我的货基该怎么办?
  12. 开篇、食堂管理评价系统(Android)
  13. 数据清洗以及常用的方法
  14. 永洪BI还能这样玩?3招让用户权限管理不再繁琐
  15. java word另存为_java实现页面另存为word
  16. 爬虫之旅(二):爬取b站搜索数据
  17. Fumark支持SLI双卡测试设置
  18. 自学java可以吗?难吗?
  19. 7-90 社交集群 (30分)--详解
  20. 高晓松《晓说》为何这么红?

热门文章

  1. Java11 ZGC 和 Java12 Shenandoah 介绍:苟日新、日日新、又日新
  2. OpenCV Error: Unspecified error (could not find a writer for the specified extension) in imwrite
  3. 腾讯云创建辅助网卡实现源进源出
  4. 用sheel xmllint --xpath模块进行xml解析
  5. Metaspace整体介绍
  6. 在亚马逊能接到服装订单吗?亚马逊美国站突然没订单怎么办?
  7. Macy‘s Thanksgiving Day Parade
  8. HTTP 模拟post请求
  9. IEEE754 详点
  10. RabbitMQ系列【8】消息可靠性之ACK机制