1.问题解决部分
拍摄一张照片反馈no such file or directory找不到摄像头
vita@raspberrypi:~ $ fswebcam /dev/video0 --no-banner -r 640x480 ~/image02.jpg
--- Opening /dev/video0...
stat: No such file or directory
检查usb摄像头设备连接情况
vita@raspberrypi:~ $ ls -l /dev/video*
crw-rw----+ 1 root video 81, 1 Apr 2 23:27 /dev/video1
crw-rw----+ 1 root video 81, 10 Apr 2 22:10 /dev/video10
crw-rw----+ 1 root video 81, 11 Apr 2 22:10 /dev/video11
crw-rw----+ 1 root video 81, 12 Apr 2 22:10 /dev/video12
crw-rw----+ 1 root video 81, 2 Apr 2 22:10 /dev/video13
crw-rw----+ 1 root video 81, 3 Apr 2 22:10 /dev/video14
crw-rw----+ 1 root video 81, 4 Apr 2 22:10 /dev/video15
crw-rw----+ 1 root video 81, 5 Apr 2 22:10 /dev/video16
crw-rw----+ 1 root video 81, 13 Apr 2 22:10 /dev/video18
crw-rw----+ 1 root video 81, 15 Apr 2 23:27 /dev/video2
crw-rw----+ 1 root video 81, 6 Apr 2 22:10 /dev/video20
crw-rw----+ 1 root video 81, 7 Apr 2 22:10 /dev/video21
crw-rw----+ 1 root video 81, 8 Apr 2 22:10 /dev/video22
crw-rw----+ 1 root video 81, 9 Apr 2 22:10 /dev/video23
crw-rw----+ 1 root video 81, 14 Apr 2 22:10 /dev/video31
vita@raspberrypi:~ $ v4l2-ctl --list-devices
bcm2835-codec-decode (platform:bcm2835-codec):
/dev/video10
/dev/video11
/dev/video12
/dev/video18
/dev/video31
/dev/media3
bcm2835-isp (platform:bcm2835-isp):
/dev/video13
/dev/video14
/dev/video15
/dev/video16
/dev/video20
/dev/video21
/dev/video22
/dev/video23
/dev/media1
/dev/media2
icspring camera: icspring camer (usb-3f980000.usb-1.2):
/dev/video1
/dev/video2
/dev/media0
Cannot open device /dev/video0, exiting.
ls /dev/video*
/dev/video1 /dev/video12 /dev/video15 /dev/video2 /dev/video22
/dev/video10 /dev/video13 /dev/video16 /dev/video20 /dev/video23
/dev/video11 /dev/video14 /dev/video18 /dev/video21 /dev/video31
这几种应该都可以,不知道为什么笔者只连了一个摄像头,但出来了一堆设备编号,只是没有/dev/video0
vita@raspberrypi:~ $ fswebcam /dev/video1 --no-banner -r 640x480 ~/image010.jpg
--- Opening /dev/video0...
stat: No such file or directory
即使改成有的 /dev/video1它依旧打开/dev/video0
错误原因:某些版本的fswebcam
默认检查 /dev/video0
,但摄像头是 /dev/video1
解决方案:使用 -d /dev/video1
强制指定设备
$ fswebcam -d /dev/video1 --no-banner -r 640x480 ~/image010.jpg
反馈成功
--- Opening /dev/video1...
Trying source module v4l2...
/dev/video1 opened.
No input was specified, using the first.
--- Capturing frame...
Captured frame in 0.00 seconds.
--- Processing captured image...
Disabling banner.
Writing JPEG image to '/home/vita/image010.jpg'.
2.个人记录部分
今天目标是希望能通过inrange识别分离特定颜色的物体(准确来说是矩形),因为笔者发现自适应阈值不好用
参考文章
python-opencv中的cv2.inRange函数-优快云博客
只不过笔者还是用的RGB空间,也许改天可以试试HSV
笔者实验物品是一张便签,先拍了个照获得像素信息(过程中遇到了1.的问题
用alt+A可以看到像素分析
笔者根据希望分离区域的最大值和最小值设定了lower_red和upper_red
但是分离失败了,分离受光线影响过大,光线稍有变化就不行,明天再战
最后笔者还是用的最基本的二值化方法分离验证代码可行性
cv2.threshold(src, thresh, maxval, type)
用最基本的type: cv2.THRESH_BINARY
设定阈值是100(其实是在后面放了个黑色底板否则也有点难分离
浅记录一下中间遇到的各种问题
(1)OpenCV报-210:Unsupported format or combination of formats
文章说是图片格式问题然而笔者似乎不是改成uint8的问题而是二值化阈值的时候用的不是gray而是三通道图像
(2)mat is not a numerical tuple
TypeError: Expected Ptr<cv::UMat> for argument ‘mat‘_expected ptr<cv::umat> for argument 'mat-优快云博客
其实没太搞懂,树莓派上的opencv总是报关于函数参数的错,不管是()里还是返回值
这个是返回值的问题,前面加ret,有些情况下可以解决
似乎网上对于这类问题有很多不同解决方式,见到过如下好几种
_,binary
ret,binary
_,binary,_
个人理解是增加接收值的变量数量(?未查证
总之换来换去有概率解决问题