一些概念
计算机视觉:
将静止的图像,或者是视频转换成一个决策或者一种新的表达方式,这些转化都是为了达到一个目标。
且输入数据可以包含一些辅助信息,比如摄像机架在物品之上,激光扫描仪在一米处发现一个物体。
本质:把具有噪声成分的数值矩阵变成感知
视觉问题的病态本质: 随着视点的变化,物体的二维外观会变化很大。同一张二维图像,可以表示多种三维场景。
具体的问题: 数据被噪声和形变影响。
- [ 😱] 一些疑问点:
“一般来说不可能通过比较一个点和它紧密相连的点来检测图像里的边缘”,所以问题是如何进行边缘检测? 书中提到的“观察一个局部区域的统计特征,边缘检测会变得容易些”是什么意思呢?
“由局部区域卷积的响应连成的点串,构成边缘” 又是什么意思呢?
opencv的结构和内容
opencv主体分为5个模块,
CV图像处理和视觉算法,
MLL统计分类器,
HighGUI图像和视频输入/输出,
CXCORE基本机构和算法+XML支持+绘图函数,
CvAux
HighGUI常用: 里面提供读取各种类型的图像文件,视频内容以及摄像机输入的功能。
安装配置opencv
踩坑1: 未找到依赖 dll文件
解决方式:
设置环境变量,Path中加入opencv/build/x64/bin的路径,然后重启!
踩坑2 :MFC和win32项目的区别?
这个博主有解释
目前还是不清楚,win32中包含许多基本的API,MFC中包含很多类库,可通过类库间接使用API
win32程序更加的底层,MFC程序可以调用win32?
踩坑3 : 无法打开元数据文件 “platform.winmd”
首先 元数据文件platform.winmd是什么?
解决方式就是重新创建了一下项目,莫名其妙的不再报错,有可能是在配置vs时debug和x64在对应配置目录时没有选择对应的选项。
踩坑4 cmake是干嘛的?
2-1 展示图片
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat srcImg = imread("C://Users//lfy//opencv//1.jpg");
namedWindow("Example1", WINDOW_AUTOSIZE);
imshow("Example1", srcImg);
waitKey(0);
return 0;
}
踩坑1: 在加载某个图像时,出现未经处理的异常
解决方式:
认为是路径格式的问题 ,必须是:// 而不能是:\
2-2 播放视频
代码如下:
#include<iostream>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
int main(int argc, char **argv) {
namedWindow("exp2-3", cv::WINDOW_AUTOSIZE);
VideoCapture cap;
cap.open(string(argv[1]));
Mat frame;
for (;;) {
cap >> frame;
if (frame.empty())break;
// ran out of file
imshow("exp2-3", frame);
if (waitKey(33) >= 0) break;
}
return 0;
}
踩坑1:
如果直接运行程序会报错,因为argv[1]没有设定,会报strlen处的一个错误。
实际运行过程应该是右键项目->属性->调试->命令参数处填入相应的参数。
知识点:
- 实例化VedioCapture类型是为了播放以及停止各种类型的视频
- VedioCapture的open函数打开一个视频,然后定义一个Mat类型的frame,将vedio一帧帧导入frame,即 cap>>frame
- waitKey()参数是秒数,可以控制视频播放每一帧之间的间隔