OpenCV 学习笔记(1)
大纲
1.OpenCV环境搭建
2.存在问题
3.编写测试代码 C++
1.OpenCV环境搭建
- 下载5.1 并压缩到相应路径: https://opencv.org/
2.下载VS Community 2019并安装,安装时候勾选window框中的C++组件
3. 配置环境变量
添加opencv可执行文件路径,根据你自己opencv放置位置选择。我放在F盘。
4. Visual studio community
创建 控制台,配置visual stdio OpenCV头文件和相应库文件,以及可执行文件
2.存在问题
由于找不到opencv_world***d.dl,无法继续执行代码。重新安装程序可能会解决此问题。
关于opencv使用imshow函数闪退解决方法等问题。
解决措施,将该目录下面的缺失文件复制到放到visual studio 工程目录下x64(x86)下
的debug位置即可。
3.编写测试代码
(1)显示图片和文字
#include
#include //调用OpenCV核心库
#include //调用highgui.hpp库,就是使用imread等
using namespace cv;
using namespace std;
int main()
{
std::cout << "hello world" << endl;
Mat img = imread("C:\\bg.jpg"); //创建矩阵matrix=读取文件 \\
namedWindow("photo"); //创建一个窗口
imshow("photo", img); //在窗口中展示图片 image show in window
waitKey(10000); //等待键盘输入10s
return 0;
}
(2)创建400x400的矩阵,每个矩阵赋值为0,单通道。
m.data 是该矩阵的首地址,
其中
*(m.data + m.step[0] * row + m.step[1] * col)=255,就是对该矩阵中的某一元素填充相应的值
该程序的效果就是RGB不是由0-255色域,则RGB在该色域内会变换,0就是黑色,255就是白色。
#include "iostream.hpp"
#include "opencv2/opencv.hpp"
using std::cout;
using std::endl;
using cv::Mat;
using cv::Scalar;
using cv::imshow;
int main()
{
Mat m(400, 400, CV_8U, Scalar(0)); //创建400x400的矩阵matrix CV_8UC1
for (int col = 0; col < 400; col++)
{
for (int row = 195; row < 205; row++)
{
cout << (int)(*(m.data + m.step[0] * row + m.step[1] * col)) << "==>";
*(m.data + m.step[0] * row + m.step[1] * col) = 255;
cout << (int)(*(m.data + m.step[0] * row + m.step[1] * col)) << endl;
}
}
imshow("canvas", m);
cv::waitKey();
return 0;
}
(3)调用摄像头
#include //调用C++基本库
#include
using namespace cv;
using namespace std;
int main()
{
Mat in_frame, out_frame;
const char win1[] = "Grabbing...";
const char win2[] = "Recoding...";
double fps = 30; //帧频率
VideoCapture inVid(0); //定义结构体变量,打开电脑自带的相机
char file_out[] = "recorded avi";
int width = (int)inVid.get(CAP_PROP_FRAME_WIDTH);
int height = (int)inVid.get(CAP_PROP_FRAME_HEIGHT);
VideoWriter recVid(file_out,VideoWriter::fourcc('M', 'S', 'V', 'C'), fps, Size(width, height));
if (!inVid.isOpened())
{
cout << "Error! Camara not ready...\n";
return -1;
}
namedWindow(win1);
namedWindow(win2);
while (1)
{
inVid >> in_frame; //将inVid内容传入in_frame中
imshow("Video", in_frame);
cvtColor(in_frame, out_frame, COLOR_BGR2GRAY);
imshow(win1, in_frame); //在窗口中显示帧
imshow(win2, out_frame); //在窗口中显示帧
if (waitKey(1000 / fps) >= 0) //设置显示频率
break;
}
inVid.release(); //释放视频文件或视频设备
return 0;
}
未完待续
时间 : 20211121 20:46:39