测试USB摄像头
目录结构:
camera
├── build
├── CMakeLists.txt
└── src
└── testv.cpp
CMakeList.txt 内容如下:
~/camera$ cat CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(camera )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( demo src/testv.cpp )
target_link_libraries( demo ${OpenCV_LIBS} )
testv.cpp 的内容如下:
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
cout << "open camera..." << endl;
VideoCapture capture(0);
cout << "camera opened." << endl;
while (1)
{
Mat frame;
capture >> frame;
imshow("读取视频帧", frame);
waitKey(30);
}
system("pause");
return 0;
}
//原文链接:https://blog.csdn.net/qq_43279579/article/details/109289755
//g++ test.cpp -o test `pkg-config --cflags --libs opencv`
进入 build 目录,执行 cmake ..
~/camera/build$ cmake ..
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenCV: /usr/local (found version "4.10.0")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/gdv2/camera/build
再执行 make 命令
~/camera/build$ make
[ 50%] Building CXX object CMakeFiles/demo.dir/src/testv.cpp.o
[100%] Linking CXX executable demo
[100%] Built target demo
运行程序 demo
~/camera/build$ ./demo
open camera...
camera opened.
如果无法打开摄像头,通常是因为权限不足。可通过以下命令增加权限,即可。
~/camera/build$ ls -l /dev/video0
crw-rw----+ 1 root video 81, 0 Jun 19 2024 /dev/video0
~/camera/build$ sudo chmod o+rw /dev/video0
~/camera/build$ ls -l /dev/video0
crw-rw-rw-+ 1 root video 81, 0 Jun 19 2024 /dev/video0
可在console上执行,以方便打开图形界面。
显示图片
目录结构:
digital
├── build
├── CMakeLists.txt
├── img
│ └── jnu2.jpg
└── src
└── demo.cpp
CMakeList.txt 内容如下:
cmake_minimum_required(VERSION 3.0)
project( digital )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( demo src/demo.cpp )
target_link_libraries( demo ${OpenCV_LIBS} )
demo.cpp 的内容如下:
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
using namespace std;
using namespace cv;
Mat src;
int main(int argc, char ** argv)
{
src = imread("/home/gdv2/testv/digital/img/jnu2.jpg");//这里是你的图片
if (src.empty())
{
cout << "没有读取到图像" << endl;
return -1;
}
cout << "to show image ..." << endl;
imshow("hello", src);
cout << "end of showing image ..." << endl;
waitKey(0);
return 0;
}
进入 build 目录,执行 cmake ..
~/digital/build$ cmake ..
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenCV: /usr/local (found version "4.10.0")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/gdv2/digital/build
再执行 make 命令
~/digital/build$ make
[ 50%] Building CXX object CMakeFiles/demo.dir/src/demo.cpp.o
[100%] Linking CXX executable demo
[100%] Built target demo
运行程序 demo
~/digital/build$ ./demo
to show image ...
end of showing image ...
可在console上执行,以方便打开图形界面。
人脸检测
目录结构:
face
├── build
├── CMakeLists.txt
├── img
│ ├── face01.png
│ └── face02.jpg
├── src
│ └── face.cpp
└── xml
└── haarcascade_frontalface_alt2.xml
CMakeList.txt 内容如下:
cmake_minimum_required(VERSION 3.0)
project(face )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( face src/face.cpp )
target_link_libraries( face ${OpenCV_LIBS} )
face.cpp 的内容如下:
#include <opencv2/opencv.hpp>
//#include <opencv.hpp>
#include <iostream>
#include <opencv2/face.hpp>
using namespace std;
using namespace cv;
int main(int argc, char *argv[])
{
Mat img = imread("/home/gdv2/testv/face/img/face02.jpg");
namedWindow("display");
imshow("display", img);
/*********************************** 1.加载人脸检测器 ******************************/
// 建立级联分类器
CascadeClassifier cascade;
// 加载训练好的 人脸检测器(.xml)
//注意路径问题,当前目录的上一个目录中的xml文件夹下
const string path = "/home/gdv2/testv/face/xml/haarcascade_frontalface_alt2.xml";
if (!cascade.load(path))
{
cout << "cascade load failed!\n";
}
//计时
double t = 0;
t = (double)getTickCount();
/*********************************** 2.人脸检测 ******************************/
vector faces(0);
cascade.detectMultiScale(img, faces, 1.1, 2, 0, Size(30, 30));
cout << "detect face number is :" << faces.size() << endl;
/******************************** 3.显示人脸矩形框 ******************************/
if (faces.size() > 0)
{
for (size_t i = 0; i < faces.size(); i++)
{
rectangle(img, faces[i], Scalar(150, 0, 0), 3, 8, 0);
}
}
else cout << "未检测到人脸" << endl;
t = (double)getTickCount() - t; //getTickCount(): Returns the number of ticks per second.
cout << "检测人脸用时:" << t * 1000 / getTickFrequency() << "ms (不计算加载模型的时间)" << endl;
namedWindow("face_detect");
imshow("face_detect", img);
waitKey(0);
destroyWindow("display");
destroyWindow("face_detect");
return 0;
}
haarcascade_frontalface_alt2.xml,查找 openCV 的安装结果,复制了一个过来的。
进入 build 目录,执行 cmake ..
~/face/build$ cmake ..
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenCV: /usr/local (found version "4.10.0")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/gdv2/face/build
再执行 make 命令
~/face/build$ make
[ 50%] Building CXX object CMakeFiles/face.dir/src/face.cpp.o
[100%] Linking CXX executable face
[100%] Built target face
运行程序 face
~/face/build$ ./face
detect face number is :4
检测人脸用时:386.124ms (不计算加载模型的时间)
可在console上执行,以方便打开图形界面。
找了个合影图片,有3张脸。检测到了2张脸,有1张脸未检测到;还框了2处不是脸的部分。后续再检查。