我是Python和OpenCV的初学者。我正在尝试一段代码,它从网络摄像头获取输入图像。下面是一段代码。
cam = create_capture(video_src, fallback='synth:bg=../cpp/lena.jpg:noise=0.05')
while True:
ret, img = cam.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.equalizeHist(gray)
rects = detect(gray, cascade)
vis = img.copy()
draw_rects(vis, rects, (0, 255, 0))
for x1, y1, x2, y2 in rects:
roi = gray[y1:y2, x1:x2]
vis_roi = vis[y1:y2, x1:x2]
subrects = detect(roi.copy(), nested)
draw_rects(vis_roi, subrects, (255, 0, 0))
dt = clock() - t
draw_str(vis, (20, 20), 'time: %.1f ms' % (dt*1000))
cv2.imshow('facedetect', vis)
if 0xFF & cv2.waitKey(5) == 27:
break
cv2.setMouseCallback('facedetect',capture_image)
cv2.destroyAllWindows()
我同时使用Python2.7和Python3.4来执行此操作。在这两方面,我都面临一个奇怪的问题。代码给出了如下断言错误
OpenCV错误:cv::cvtColor,文件中的断言失败(scn==3 | | scn==4)。。。。。。。。\opencv\modules\imgproc\src\color。cpp,第3737行灰色=cv2。CVT颜色(img,cv2.颜色为灰色)cv2。错误:。。。。。。。。\opencv\modules\imgproc\src\color。cpp:3737:错误:(-215)scn==3 | | scn==4在函数cv::cvtColor中
但这种情况只会在跑步的每一个交替时间发生。可能是什么问题?我从其他帖子中读到,当cv2时,会发生这个错误。cvtColor
尝试转换没有3或4个通道的空图像。这通常在指定错误路径时发生。就我的情况而言,由于它每隔一段时间都能正常工作,因此来源不可能是错误的。请帮忙!!
使用时间。进入while循环或
。这一次将帮助你的相机卷轴。cap之前,先睡眠(2)
。read()
至少我在你的代码中没有发现任何重大问题,即“应该工作”。问题似乎出在相机驱动程序上。相机不同,相机驱动程序也不同(又名越野车)。
不幸的是,调试相机驱动程序并不是一项非常容易的任务。奇怪的行为很可能与特定的摄像机、操作系统、OpenCV和摄像机驱动程序版本绑定。司机不太可能被修好。试着让一切保持最新。
然而,由于您的相机可以捕捉每一秒的图像,因此还有很多事情要做。
首先,通过替换来验证问题确实存在于摄像机驱动程序中:
cam = create_capture(video_src, fallback='synth:bg=../cpp/lena.jpg:noise=0.05')
通过
cam = create_capture('synth:bg=../cpp/lena.jpg:noise=0.05')
从代码中可能可以明显看出,这将强制模拟摄影机。函数create\u capture
只是提供此功能的VideoCapture
的包装。如果您的代码运行良好,则问题出在视频驱动程序中。
验证后,您可以尝试运行以下代码:
import cv2
cam = cv2.VideoCapture(0)
cam.open(0)
results = [ cam.read()[0] for i in range(100) ]
print results
这应该会创建一个100个Trues的列表,这个过程应该需要几秒钟,因为相机应该捕获100个连续的图像。
在代码中,您似乎没有使用cam的返回元组中的第一个值。阅读
(ret
在代码中)。如果真的捕获了图像,则为True
。另外,cam。读取
应在有图像可用之前停止,无需添加任何延迟。
您很可能会得到一个列表[True,False,True,False,…]
因为视频驱动程序做了一些奇怪的事情。没有什么好办法可以解决这个问题,但有一个丑陋的办法。将捕获行替换为:
# max. 10 retries
for i in range (10):
ret, img = cam.read()
if ret:
break
else:
# capture failed even after 10 tries
raise MyExceptiom("Video driver does not like me.")
当然,驱动程序可能会坏到你不得不偶尔释放并重新打开它。更丑但也可行。
总结:“很可能它无法治愈,也不会致死,而且有药物可以缓解症状。”
问题内容: 我个人在这个问题上花了很多时间,因此认为与将其发布到Stackoverflow有关。 问题取自:llSourcell / Object_Detection_demo_LIVE 问题答案: 甚至我也遇到了同样的问题,解决方案非常简单。请记住一件事,如果图像的RGB值在0-255的范围内,请确保这些值不是数据类型“ float”。由于OpenCV仅在值范围为0-1时才考虑浮动。如果发现浮点
我试图创建一个ROI以上的脸检测到放置一顶帽子,如图所示:Plz点击这里:ROI以上的脸创建放置一顶帽子 OpenCV错误:断言失败(0<=ROI.X&&0<=ROI.Width&&ROI.X+ROI.Width<=M.cols&&0<=ROI.Y&&0<=ROI.Y&&0<=ROI.Y&&0<=ROI.Height&&ROI.Y+ROI.Height<=M.rows)在Mat中,文件/home/
我正在用java开发一个程序,该程序使用opencv库获取一个图像文件夹并裁剪人脸。它使用了OpenCV中的人脸识别。我使用了它,但当我尝试使用更大的图像文件夹时,它会出现以下错误: OpenCV错误:Cv::OutOfMemoryError中内存不足(无法分配411068928字节),文件C:\builds\master_packslaveAddon-Win32-VC12-static\Open
我是OpenCV的新手,我想练习一个简单的人脸检测和图像裁剪。 具体来说,我使用从文件夹中加载图像,然后检测人脸,在检测到的人脸上绘制矩形,然后只裁剪检测到的人脸区域。 OpenCV错误:断言失败(0<=ROI.X&&0<=ROI.Width&&ROI.X+ROI.Width<=M.cols&&0<=ROI.Y&&0<=ROI.Height&&ROI.Y+ROI.Height<=M.rows),在
我是JMeter和断言概念的新手。当我试图执行一个JMX文件(包含JMeter中的断言)时,遇到了以下错误消息: 断言错误:错误断言失败:真断言失败消息:测试失败:变量(搜索结果)不相等/接收:找不到[[[]]]]比较:找不到[[[]]]]] 脚本的执行方式如下:$java-jar./apache-jmeter-2.10/bin/apachejmeter.jar-t./jmeter-master/