一、准备
1、从官网下载opencv4.4.0 exe文件 并解压到指定文件夹
2、添加换变量 F:\file\opencv\opencv\build\x64\vc15\bin 到path下,我使用的是vs2019 所以没有添加vc14
3、将opencv_world440.dll和opencv_world440d.dll拷贝到C:\Windows\SysWOW64这个文件夹里面
注意:64位系统用户需要注意,32位的DLL文件放在【C:\Windows\SysWOW64】,64位的DLL文件放在“【C:\Windows\System32】。
4、打开vs2019,新建一个命令行程序,新建成功后打开属性管理器,首先选择指定的配置管理器,
在包含目录里添加:
F:\file\opencv\opencv\build\include
库目录添加:
F:\file\opencv\opencv\build\x64\vc15\lib
选择输入—>附加依赖性 添加opencv_world440d.lib(根据下载的实际版本进行更改。可在opencv\build\x64\vc15\lib里查看)
5、测试一下,读取一张照片
#include <opencv2/opencv.hpp>
int main(int argc, char** argv) {
cv::Mat img = cv::imread("F:\\file\\abcdefg.jpg");
if (img.empty()) {
printf("资源未找到");
return -1;
}
cv::namedWindow("Example1", cv::WINDOW_AUTOSIZE);
cv::imshow("Example1", img);
cv::waitKey(0);
cv::destroyWindow("Example1");
return 0;
}
二、开始
1、读取一段视频
#include <opencv2/opencv.hpp>
int main(int argc, char** argv) {
cv::namedWindow("Example2", cv::WINDOW_AUTOSIZE);
cv::VideoCapture cap;
cap.open("F:\\file\\VID_20200131_115507.mp4");
cv::Mat Frame;
for (;;) {
cap >> Frame;
if (Frame.empty()) break;
cv::imshow("Example2", Frame);
if (cv::waitKey(33) >= 0) break; //等待输入,时长为33毫秒;
//30FPS播放,准确数字为33.3ms...,60FPS则设置等待(1000/60)ms
}
return 0;
}
2、有进度条的视频播放器
#include <opencv2/opencv.hpp>
#include <iostream>
#include <fstream>
using namespace std;
int g_slider_position = 0;
int g_run = 1, g_dontset = 0;//start out int single step mode
cv::VideoCapture g_cap;
void onTrackbarSlide(int pos, void*) {
g_cap.set(cv::CAP_PROP_POS_FRAMES, pos);
if (!g_dontset)
g_run = 1;
g_dontset = 0;
}
int main(int argc, char** argv) {
cv::namedWindow("Example2_4", cv::WINDOW_AUTOSIZE); //创建一个窗口
g_cap.open("F:\\file\\VID_20200131_115507.mp4"); //将指定的视频读取到g_cap中
int frames = (int)g_cap.get(cv::CAP_PROP_FRAME_COUNT); //获取视频的总帧数
int tmpw = (int)g_cap.get(cv::CAP_PROP_FRAME_WIDTH); //获取视频的宽度
int tmph = (int)g_cap.get(cv::CAP_PROP_FRAME_HEIGHT); //获取视频的高度
cout << "Video has" << frames << "frames of dimensions("
<< tmpw << "," << tmph << ")." << endl;
cv::createTrackbar("Position", "Example2_4", &g_slider_position, frames,
onTrackbarSlide);//创建进度条
cv::Mat frame;
for (;;) {
if (g_run != 0) {
g_cap >> frame;
if (frame.empty()) break;
int current_pos = (int)g_cap.get(cv::CAP_PROP_POS_FRAMES); //获取当前的帧数位置
g_dontset = 1;
cv::setTrackbarPos("Position", "Example2_4", current_pos);
cv::imshow("Example2_4", frame);
g_run -= 1;
}
char c = (char)cv::waitKey(10);
if(c=='s')//single step
{
g_run = 1; cout << "Single step,run=" << g_run << endl;
}
if (c == 'r')//run mode
{
g_run = -1; cout << "Run mode,run=" << g_run << endl;
}
if (c == 27)
break;
}
return 0;
}
3、高斯核空间滤波
#include <opencv2/opencv.hpp>
#include <iostream>
#include <fstream>
using namespace std;
//简单处理函数
void example2_5(const cv::Mat& image) {
//创建连个窗口用来显示出入和输出的图像
cv::namedWindow("Example2_5-in", cv::WINDOW_NORMAL);
cv::namedWindow("Example2_5-out", cv::WINDOW_NORMAL);
cv::imshow("Example2_5-in", image);
cv::Mat out; //输出的图像
//高斯核模糊滤波
cv::GaussianBlur(image, out, cv::Size(5, 5), 3, 3);
cv::GaussianBlur(out, out, cv::Size(5, 5), 3, 3);
//将处理后的图像打印在输出窗口
cv::imshow("Example2_5-out", out);
cv::waitKey(0);
}
int main(int argc, char** argv) {
cv::Mat image = cv::imread("F:\\file\\abcdefg.jpg");
example2_5(image);
return 0;
}
创建窗口时 AUTOSIZE 则将窗口自动调整至包裹图片大小,但存在最大值,当图片超过最大值时将会导致图片无法完全显示出来,使用NORMAL参数时 则会创建一个固定大小的窗口,图片会被缩放以适应窗口大小