【OpenCV C++版】
·
OpenCV常见API C++版:
一、引言:
本篇博客为嵌入式AI项目中学习总结
二、基本用法:
1. 基本用法:
1.1 头文件:
#include<opencv2/opencv.hpp>//包含了关于opencv的所有库, 可以只调用这个就行
#include<opencv2/imgcodecs.hpp> //图像的读取和写入
#include<opencv2/highgui.hpp>//创建图形用户界面
#include<opencv2/imgproc.hpp>//图像处理的函数
1.2 OpenCV查看图片
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
// 查看图片
string path = "../cv.jpg";
Mat img = imread(path); //在OpenCV中图片格式通常使用Mat保存
namedWindow("image"); //新建图形化窗口
imshow("imge", img); //图片展示
waitKey(0); //图片展示的时长, 传参: 延迟毫秒数ms(0表示无限等待直到按键)
return 0;
}
1.2.1 补充:
-
imread():
imread(); // 第二个参数: // 1. IMREAD_UNCHANGED: 按原样加载图像,保留所有信息 // 2. IMREAD_GRAYSCALE: 将图像转换为灰度图 // 3. IMREAD_COLOR: 将图像转换为彩色 BGR 格式, (正常图是RGB, OPenCV里面是BGR) -
empty 和 waitKey:
int main() { string path = "../cv.jpg"; Mat img = imread(path, IMREAD_GRAYSCALE); if(img.empty()){ cout << "img error" << endl; return -1; } imshow("img", img); imwrite("img0.jpg", img); waitKey(0); return 0; }
1.3 OpenCV查看视频
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
// 查看视频
string path = "../test.mp4";
VideoCapture cap(path); //视频文件路径 或 摄像头ID(0=默认摄像头)
Mat img;
while(1){
cap.read(img); // 使用read方法将视频帧保存到img中
imshow("cap", img);
waitKey(2); //每帧图片显示时长为2ms
}
}
1.3.1 补充:
-
isOpened() 和 cap.get:
int main() { string path = "../test.mp4"; VideoCapture cap(path); if(!cap.isOpened()){ // true:视频/摄像头成功打开 printf("video open failed \r\n"); return -1; } // cap.get(): 获取视频/摄像头的属性 /* 1. 帧宽度(像素) 2. 帧高度(像素) 3. 帧率(FPS) 4. 总帧数(仅视频文件) 输出: width: 960, height: 720, fps: 30, frame_num: 904 视频总共:30s, 现在:30张/s, 30*30=900,约等于904张。 */ int width = cap.get(CAP_PROP_FRAME_WIDTH); int height = cap.get(CAP_PROP_FRAME_HEIGHT); double fps = cap.get(CAP_PROP_FPS); int frame_num = cap.get(CAP_PROP_FRAME_COUNT); printf("width: %d, height: %d, fps: %d, frame_num: %d \r\n", width, height, fps, frame_num ); Mat img; while(1){ cap.read(img); imshow("img", img); waitKey(2); } return 0; }
1.4 OpenCV读取摄像头
int main()
{
VideoCapture cap(0); // 调用摄像头编号为0的摄像头
Mat img;
while(1){
cap.read(img);
imshow("imge", img);
waitKey(2);
}
}
1.5 OpenCV写视频
// 设置视频尺寸
/* 1- Size:是一个类,
framesize是它的对象
*/
cv::Size framesize(width, height); // 创建视频帧尺寸
// 1- fourcc图像格式 2- fps:输入帧数 3-framesize:设置视频尺寸
cv::VideoWriter writer(path, \
cv::VideoWriter::fourcc('I', '4', '2', '0'), fps, framesize); // 创建视频写入对象
1.5 自己绘制图形过程
// 1. 画矩形, 注意: 左上右下;颜色(BGR, 与常规的相反)
rectangle(img, Point(0,0), Point(100, 100), Scalar(0,0,255), 2);
rectangle(img, // 输入输出图像(要绘制矩形的图像)
Point(0,0), // pt1: 矩形左上角坐标 (x, y)
Point(100,100), // pt2: 矩形右下角坐标 (x, y)
Scalar(0,0,255), // color: 颜色 (B, G, R) 格式,这里是红色
2, // thickness: 线宽(-1表示填充)、、、-1或FILLED是填充; 2表示粗细
);
// 2. 输出文字, 注意:左下
putText(img, "hello world", Point(200,100), FONT_HERSHEY_DUPLEX, 0.75, Scalar(0,0,255), 2);
putText(img, // 输入输出图像
"hello world", // text: 要绘制的文本
Point(200, 100), // org: 文本左下角起点坐标 (x, y)
FONT_HERSHEY_DUPLEX, // fontFace: 字体类型
0.75, // fontScale: 字体缩放因子
Scalar(0,0,255), // color: 文本颜色
2, // thickness: 线宽
)
// 字体类型
FONT_HERSHEY_SIMPLEX // 普通大小无衬线字体(最常用)
FONT_HERSHEY_PLAIN // 小号无衬线字体
FONT_HERSHEY_DUPLEX // 复杂无衬线字体(比SIMPLEX更粗)
FONT_HERSHEY_COMPLEX // 复杂衬线字体
FONT_HERSHEY_TRIPLEX // 三倍衬线字体(比COMPLEX更粗)
FONT_HERSHEY_COMPLEX_SMALL // 小号复杂衬线字体
FONT_HERSHEY_SCRIPT_SIMPLEX // 手写体(类似草书)
FONT_HERSHEY_SCRIPT_COMPLEX // 复杂手写体
等待更新ing
更多推荐



所有评论(0)