Python+Opencv 调用USB摄像头(二)

目录

 

一.问题

二.问题分析

2.0.分析

2.1.协议问题

2.2驱动问题

2.3.必须用相机自带SDK(Software Development Kit)软件开发工具包调用相机

三.相关拓展


一.问题

继Python+Opencv 调用USB摄像头(一)结尾代码,发现调用不了,换了一个相机,还是不行.

测试代码:

import cv2
cams_test = 10
for i in range(0, cams_test):
    cap = cv2.VideoCapture(i)
    test, frame = cap.read()
    print("i : "+str(i)+" /// result: "+str(test))    

 只有0是ture即笔记本自带相机

i : 0 /// result: True
support SSE4.1
i : 1 /// result: False
[ WARN:0] terminating async callback
i : 2 /// result: False
i : 3 /// result: False
i : 4 /// result: False
i : 5 /// result: False
i : 6 /// result: False
i : 7 /// result: False
i : 8 /// result: False
i : 9 /// result: False

用(一)结尾代码(ps:这段代码把1改为0是可以运行的,能调出笔记本的摄像头),出现这个错误提示

  • 错误:assertion faile 断言失败

二.问题分析

2.0.分析

  • 找到了同样错误的两篇博客:
  • opencv 报错 OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshowhttps://blog.csdn.net/sjx1989/article/details/79038996

  • OpenCV Error: Assertion failed (size.width>0 && size.height>0) in cv::imshowhttps://blog.csdn.net/dlhlSC/article/details/51298186

  • 我们的传参错误出现在frame,而frame又来源于cap.read(),cap又源于cv2.VideoCapture(1)其实也就是测试代码中就暴露的问题 没有调用成功

2.1.协议问题

  • 相关:用OpenCV调用IP摄像头(python版)https://blog.csdn.net/qq_38957170/article/details/79821415#commentBox
  • 验证:似乎博主调用视频出现问题,IP camera应该是相机自带的软件,就像我们的 和 Python+Opencv 调用USB摄像头(二)_第1张图片
  • 问题似乎出在协议 导致不能传输视频流?不知道咋验证

2.2驱动问题

打开硬件管理器

Python+Opencv 调用USB摄像头(二)_第2张图片

 

 

 

Python+Opencv 调用USB摄像头(二)_第3张图片

似乎也不是驱动的问题。。

 

2.3.必须用相机自带SDK(Software Development Kit)软件开发工具包调用相机

2.3.1猜测:

  • 不同相机参数设置,性能等差异大,用OpenCV(Open Source Computer Vision Library)直接调用其功能可能容易出现问题,所以商家给相机有配置自带的SDK,这样可以直接通过SDK调用相机?镜头,视频流等....
  • SDK 百科 https://baike.baidu.com/item/sdk/7815680?fr=aladdin
  • OpenCV百科 https://baike.baidu.com/item/opencv/10320623?fr=aladdin

2.3.2 SDK里有啥子

  • API(Application Programming Interface,应用编程接口)其实就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API而使操作系统去执行应用程序的命令(动作)。
  • DLL (Dynamic Link Library, 动态链接库)
  • 在 Windows 环境下含有大量 .dll格式的文件,这些文件就是动态链接库文件,其实也是一种可执行文件格式。跟 .exe 文件不同的是,.dll 文件不能直接执行,他们通常由 .exe 在执行时装入,内含有一些资源以及可执行代码等。其实 Windows 的三大模块就是以DLL的形式提供的(Kernel32.dll,User32.dll,GDI32.dll),里面就含有了 API函数的执行代码。为了使用 DLL 中的 API 函数, 必须要有 API 函数的声明(.h)和其导入库(.lib),导入库可以先这样理解:导入库是为了在 DLL 中找到 API 的入口点而使用的。
  • 为了使用 API 函数,我们就要有跟 API 所对应的 .h 和 .lib 文件,而 SDK 正是提供了一整套开发 Windows 应用程序所需的相关文件、范例和工具的“工具包”。
  • SDK 包含了使用 API 的必需资料,所以人们也常把仅使用 API 来编写 Windows 应用程序的开发方式叫做 “SDK编程”。而API和 SDK 是开发Windows应用程序所必需的东西,所以其它编程框架和类库都是建立在它们之上的,比如VCL 和MFC,虽然他们比起 “SDK 编程” 来有着更高的抽象度,但这丝毫不妨碍我们在需要的时候随时直接调用 API 函数 

2.3.3 相关帖子1

Python+Opencv 调用USB摄像头(二)_第4张图片

  •  解决方案

???懵逼
 

2.3.4 相关帖子2

  • 问题:外接USB工业相机无法通过0或1打开 http://tieba.baidu.com/p/4587340201
  • 解决:

???????????

2.3.5 相关文章3

  • python-opencv怎么调用大恒水星工业相机?它自带的sdk只能实时显示图像,不能进行处理。https://zhidao.baidu.com/question/1736774752864718627.html
  • 收获:如何用自带SDK调用实时图像的??

2.3.6 是否可以用SDK里的ddl调用相机??

Python+Opencv 调用USB摄像头(二)_第5张图片

  • 相关:如何用ctypes调用dll  python调用dll动态链接库 https://blog.csdn.net/ab17171313/article/details/80256551
  • 收获:这个好像是调用成功以后用到特定功能时候才用到的吧??

2.3.7* 海康威视网络摄像头SDK中Demo的二次开发

  • 网站:https://blog.csdn.net/qq_15029743/article/details/79733960
  • 发现:这是海康网络摄像头一个相关博客,貌似在SDK文件里有示例文档,找了一下我们的industry 文档里没有文档

2.3.8 一篇不明觉厉的博客

  • 关于工业相机编程调用SDK二次开发的一些步骤流程 https://blog.csdn.net/Jack_Sarah/article/details/79994724 

三.相关拓展

  • Python编程提高:如何调用DLL函数之传递数值、指针与字符串参数 https://baijiahao.baidu.com/s?id=1615259691934668555&wfr=spider&for=pc
  • python中的encode()和decode()函数https://blog.csdn.net/m0_38080253/article/details/78841280
  • 为什么离不开 Stackoverflow?http://blog.jobbole.com/102810/
  • IT网站 https://stackoverflow.com/
  • VS(C#)调用海康工业相机SDK采集图像及基本功能设定https://blog.csdn.net/biggestcherry/article/details/87011094

 

 

你可能感兴趣的:(opencv)