好久沒有更新了,今天更一篇最近遇到的問題,及解決辦法,后面博客得繼續寫起來
安裝
#使用Python下的lib庫直接進行安裝
apt-get install python-opencv
測試
#使用如下代碼進行測試,以下代碼是拍照,在按q之后,保存圖片並退出。
import cv2
cap = cv2.VideoCapture(0)
while(1):
# get a frame
ret, frame = cap.read()
# show a frame
cv2.imshow("capture", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
cv2.imwrite("./test.jpeg", frame)
break
cap.release()
cv2.destroyAllWindows()
至此代表安裝基本沒有問題,可以進行下一步開發
開發
通過在上述的測試代碼添加配置攝像頭的參數
#設置攝像頭的像素
cap.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH,3264)
cap.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT,2448)
#設置攝像頭的幀率
cap.set(cv2.cv.CV_CAP_PROP_FPS,5)
本以為萬事大吉可以收工了,一運行發現了個巨大的問題
錯誤如下提示
libv4l2: error converting / decoding frame data: v4l-convert: error
destination buffer too small (16777216 < 23970816)
VIDIOC_DQBUF: Bad address
看提示是因為自己想用到高清的,可是libv412庫不支持,導致buffer不夠大,產生的錯誤,通過libv4l2: error converting / decoding frame data: v4l-convert: error destination buffer too small 解決問題,下面說一下解決步驟
- 找到libv4l2的源碼github
- 更改源碼路徑下的lib/libv4l2/libv4l2-priv.h文件中的如下代碼
//The change was
#define V4L2_FRAME_BUF_SIZE (4096 * 4096)
//to
#define V4L2_FRAME_BUF_SIZE (2 * 4096 * 4096)
- 首先卸載系統之前的這個庫文件
sudo apt-get remove libv4l-dev
- 編譯安裝剛改更改過的庫
#源碼目錄下先進行configure,這個中間貌似由於沒有安裝autoconf之類的東西,也報過錯,出現錯誤后大家Google一下就能找到答案,都是些容易解決的問題
autoreconf -vfi
make
make install
這樣庫文件就重新安裝了,測試一下,高清的攝像頭也可以用了。
同時開多個攝像頭
本以為萬事大吉了,萬萬沒想到又出幺蛾子了,同時打開三個攝像頭的時候又報錯了如下:
libv4l2: error turning on stream: No space left on device
一下就嗨皮了,查了一下貌似說是usb帶寬不夠用了,經過找資料找到下面的解決辦法
sudo rmmod uvcvideo
#下面這個128可以更改最好改大點,如果用的是高清攝像頭
sudo modprobe uvcvideo quirks=128
如果更改有效,可以用下面的方法進行配置,這樣就不用每次都改了
sudo vi /etc/modprobe.d/uvcvideo.conf
options uvcvideo quirks=128
ok終於可以順利運行了,上面的應用大家就可以根據自己的需要隨便改了。