最近刚好赶上学校的实训,学校请了一位大佬前来助阵,果然,有人带着你学比你自己闭门造车舒服多了,一直想学OpenCv,但是由于重重阻挠,Bug一个又一个,只看B站上的视频,让我两个多月只学会个搭环境!不说别的,linux树莓派上,OpenCV为啥打不开摄像头这个问题,我查遍了CSDN,百度,谷歌都没能找到问题,在老师这一句话就解决了,果然技术大牛很多,但是分享技术的大牛却很少,所以以后我要万分珍惜大佬分享的知识.
链接:https://pan.baidu.com/s/1EXEf5NP7D_SWVZ7E6g_fjg
提取码:8n01
以上为封装好的raspbian2
,只需下载到电脑本地,然后在VM上,打开虚拟机
即可,里面的OpenCV环境也已配好(当然后面的内容也会提到安装OpenCV的命令)
我是用XShell远程连接虚拟机,因为虚拟的使用起来不是很方便.
我们要做的就是修改密码
sudo passwd pi #修改 pi 密码
#建议 用户名和密码都改成pi,这样好记一些,毕竟这个是我们学习用的
sudo apt install libopencv-dev
#include
#include
using namespace std;
using namespace cv;
int main(){
VideoCapture cam;
cam.open(0);
if(!cam.isOpened()){
cout<<"Failed to open camera!"<<endl;
return -1;
}
cout<<"Success to open camera!"<<endl;
return 0;
}
#编译
#上面的代码我命名为test.cpp
g++ test.cpp -lopencv_videoio -lopencv_core -lopencv_highgui
执行—>
如果提示Failed to open camera!
,依照下面的红圈进行点击!
#include
#include
using namespace std;
using namespace cv;
int main(){
VideoCapture cam;
cam.open(0);
if(!cam.isOpened()){
cout<<"Failed to open camera!"<<endl;
exit(-1);
}
cout<<"Success to open camera!"<<endl;
Mat image;
cam.read(image);
if(image.empty()){
cout<<"read picture is empty!"<<endl;
exit(-2);
}
imshow("OpenCv",image);
imwrite("./image.jpg",image);
waitKey(0);
return 0;
}
#编译
#上面的代码我命名为test2.cpp
g++ test2.cpp -lopencv_videoio -lopencv_core -lopencv_highgui
# 运行报错:缺少libopencv_imgcodecs.so.3.2的支持
/usr/bin/ld: /tmp/ccmqXUXR.o: undefined reference to symbol '_ZN2cv7imwriteERKNS_6StringERKNS_11_InputArrayERKSt6vectorIiSaIiEE'
/usr/bin/ld: //usr/lib/i386-linux-gnu/libopencv_imgcodecs.so.3.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
#重新编译,增加一项-lopencv_imgcodecs,成功编译!
g++ test2.cpp -lopencv_videoio -lopencv_core -lopencv_highgui -lopencv_imgcodecs
可以看到,图片已经生成!可以通过树莓派的文件图形化工具打开!
这个问题,我通过百度,csdn,基维百科,等待,都查遍了,也没有答案呀!难道又要到此为止了吗?不,我在尝试了种种解决办法后依然没有得到解决,后来去问chatgpt,他给出了我两三解决办法,但是都没有用!不够还有最后一个解决办法!卸载端口COM3,这一步我不太敢,万一搞不好就把板子或电脑搞坏了,然后我又重启打开,重启打开,重复多次仍然没有解决,于是只能抱着试一试的心态,卸载了COM3.
(注:设备管理器在Win10中的位置: 控制面板->硬件和声音->设备管理器)
卸载COM3之后,把掉板子,将MobaXterm中连接过的记录彻底删除,然后再连接板子,重启板子,在设备管理器中:端口->右击:扫描检查硬件改动,将设备管理器关了重开,可以看到我们卸载的COM3又回来了!
可以看到板子可以正常使用了!