4h上手C++版Opencv
opencv4.5.0的下载与环境配置
Releases - OpenCV
vs环境配置
项目属性页
验证是否配置成功
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>using namespace cv;
using namespace std;/ Images //void main() {string path = "Resources/test.png";Mat img = imread(path);imshow("Image", img);waitKey(0);
}
第一章
图片展示
/ Images ///
void main()
{string path = "Resources/test.png"; //图片路径Mat img = imread(path); //图片读取imshow("Image", img); //创建一个串口,图片展示waitKey(0); //等待图片刷新 0-无穷大
}
【OpenCV】imshow()和namedWindow()之间的关系,解决两个窗口问题
waitkey:函数告诉系统暂停并且等待键盘事件(0或负数,等待到有键被按下)。如果其传入了一个大于0的参数,它将会等待等同于该参数的毫秒事件。
视频展示
/// Video ///
void main()
{string path = "Resources/test_video.mp4";VideoCapture cap(path); Mat img;while (true) //需要循环读出每一帧{ cap.read(img);imshow("Image", img);waitKey(1);}
}
网络摄像头
/// Webcam ///
void main()
{VideoCapture cap(0); //选择的ID号 -1-.随机选择一个Mat img;while (true){cap.read(img);imshow("Image", img);waitKey(1);}
}
第二章
cvtcolor()
一个颜色空间转换函数,可以实现RGB颜色向HSV,HSI等颜色空间转换。也可以转换为灰度图。”
函数原型:
CV_EXPORTS_W void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 );
src:平面图像源文件
dst:输出图形
code:指定转换类型
cvtColor(img, imgGray, COLOR_BGR2GRAY);
GaussianBlur()
高斯滤波器,对图像进行高斯滤波,去除噪声,图像预处理一般都用
函数原型:
CV_EXPORTS_W void GaussianBlur( InputArray src, OutputArray dst, Size ksize,double sigmaX, double sigmaY = 0,int borderType = BORDER_DEFAULT );
src:输入的图像
dst:输出图像
ksize:高斯卷积核的大小,是奇数
sigmaX, sigmaY=0, :表示高斯核x和y方向的方差,如果只给了x,同时y=0(默认)则y方向的方差与x相等
borderType=BORDER_DEFAULT :边界的处理方式,一般默认
GaussianBlur(img, imgBlur, Size(3, 3), 3, 0);
Canny()
边缘检测算法
CV_EXPORTS_W void Canny( InputArray image, OutputArray edges,double threshold1, double threshold2,int apertureSize = 3, bool L2gradient = false );
image:输入源图像
edges:输出的图形
threshold1:第一个滞后性阈值【低阈值】。值越大,找到的边缘越少
threshold2:第二个滞后性阈值【高阈值】。
apertureSize:表示应用Sobel算子的孔径大小,其有默认值3。
L2gradient:一个计算图像梯度幅值的标识,有默认值false。
低于阈值1的像素点会被认为不是边缘;
高于阈值2的像素点会被认为是边缘;
在阈值1和阈值2之间的像素点,若与第2步得到的边缘像素点相邻,则被认为是边缘,否则被认为不是边缘
Canny(imgBlur, imgCanny, 25, 75);
getStructuringElement()
获取结构化元素,会返回指定形状和尺寸的结构元素
函数原型:
CV_EXPORTS_W Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1));
shape:表示内核的形状,有三种:
- 矩形:MORPH_RECT
- 交叉形:MORPH_CROSS
- 椭圆形:MORPH_ELLIPSE
ksize:表示内核的尺寸
anchor:表示锚点的位置。
对于锚点的位置,有默认值Point(-1,-1),表示锚点位于中心点。element形状唯一依赖锚点位置,其他情况下,锚点只是影响了形态学运算结果的偏移。
Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5));
dilate()
函数原型:
CV_EXPORTS_W void dilate( InputArray src, OutputArray dst, InputArray kernel,Point anchor = Point(-1,-1), int iterations = 1,int borderType = BORDER_CONSTANT,const Scalar& borderValue = morphologyDefaultBorderValue() );
使用像素邻域内的局部极大运算符来膨胀图像
scr:输入的图形
dst:输出的图形
kernel:膨胀操作的核。当为NULL时,表示的是使用的是参考点位于中心3*3的核。配合getStructuringElement()使用
anchor:Point类型的anchor,锚点的位置,默认值是 (-1, -1),表示位于中心。
iterations:int类型的iterations,迭代的次数,默认值是1。
borderType:边界类型,用于推断图像外部像素的某种边界模式,默认值是BORDER_DEFAULT。
borderValue:边界值
Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5));
dilate(imgCanny, imgDil, kernel);
erode()
腐蚀运算
函数原型:
CV_EXPORTS_W void erode( InputArray src, OutputArray dst, InputArray kernel,Point anchor = Point(-1,-1), int iterations = 1,int borderType = BORDER_CONSTANT,const Scalar& borderValue = morphologyDefaultBorderValue() );
src:输入源图像
dst:输出图形
kernel:腐蚀操作的内核,若为 NULL 时,表示的是使用参考点位于中心 3x3 的核。我们一般使用函数 getStructuringElement 配合这个参数的使用。
anchor:锚的位置,其有默认值(-1,-1),表示锚位于单位(element)的中心,我们一般不用管
iterations:迭代使用 erode()函数的次数,默认值为 1。
borderType:用于推断图像外部像素的某种边界模式。注意它有默认值 BORDER_DEFAULT。
borderValue:当边界为常数时的边界值,有默值 morphologyDefaultBorderValue()
Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5));
erode(imgDil, imgErode, kernel);
第三章
resize()
分配容器的内存大小,对图片进行缩放
void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR)
src - 原图
dst - 目标图像。当参数dsize不为0时,dst的大小为size;否则,它的大小需要根据src的大小,参数fx和fy决定。dst的类型(type)和src图像相同
dsize - 目标图像大小,所以,参数dsize和参数(fx, fy)不能够同时为0
fx - 水平轴上的比例因子。
fy - 垂直轴上的比例因子。
最后一个参数插值方法,是默认值,放大时最好选 INTER_LINEAR ,缩小时最好选 INTER_AREA。
resize(img, imgResize, Size(), 0.5, 0.5);resize(img, imgResize, Size(600,600));
Rect类
Rect(int x, int y, int width, int height);
进行图片的裁剪
Rect(左上角 x 坐标 , 左上角 y 坐标,矩形的宽,矩形的高)
Rect roi(100, 100, 300, 250);
imgCrop = img(roi);
第四章
void main()
{Mat img(512, 512, CV_8UC3, Scalar(255, 255, 255));//画圆circle(img, Point(256, 256), 155, Scalar(0, 69, 255),FILLED);//矩形rectangle(img, Point(130, 226), Point(382, 286), Scalar(255,255,255), FILLED);//画线line(img, Point(130, 296), Point(382, 296), Scalar(255, 255, 255), 2);//输出字体putText(img, "Murtaza's Workshop", Point(137, 262), FONT_HERSHEY_DUPLEX, 0.75, Scalar(0, 69, 255), 2);imshow("Image", img);waitKey(0);
}
circle函数 画圆
rectangle 矩形
line 画线
putText 输出字体
第五章
/ Warp Images ///
float w = 250, h = 350;
Mat matrix, imgWarp;void main()
{string path = "Resources/cards.jpg";Mat img = imread(path);Point2f src[4] = { {529,142},{771,190},{405,395},{674,457} };Point2f dst[4] = { {0.0f,0.0f},{w,0.0f},{0.0f,h},{w,h} };matrix = getPerspectiveTransform(src, dst);warpPerspective(img, imgWarp, matrix, Point(w, h));for (int i = 0; i < 4; i++){circle(img, src[i], 10, Scalar(0, 0, 255), FILLED);}imshow("Image", img);imshow("Image Warp", imgWarp);waitKey(0);
}
getPerspectiveTransform warpPerspective
第6章
Mat imgHSV, mask;
int hmin = 0, smin = 0, vmin = 0;
int hmax = 255, smax = 255, vmax = 255;void main()
{string path = "Resources/shapes.png";Mat img = imread(path);cvtColor(img, imgHSV, COLOR_BGR2HSV);//创建滑块蓝namedWindow("Trackbars", (640, 200));createTrackbar("Hue Min", "Trackbars", &hmin, 179);createTrackbar("Hue Max", "Trackbars", &hmax, 179);createTrackbar("Sat Min", "Trackbars", &smin, 255);createTrackbar("Sat Max", "Trackbars", &smax, 255);createTrackbar("Val Min", "Trackbars", &vmin, 255);createTrackbar("Val Max", "Trackbars", &vmax, 255);while (true){Scalar lower(hmin, smin, vmin);Scalar upper(hmax, smax, vmax);inRange(imgHSV, lower, upper, mask);imshow("Image", img);imshow("Image HSV", imgHSV);imshow("Image Mask", mask);waitKey(1);}
}
HSV颜色空间超极详解&inRange函数用法及实战
inRange()函数、cvtColor()函数、createTrackbar()函数
4h上手C++版Opencv相关推荐
- matlab中caitu_tiqu,车牌识别matlab语音版+OpenCV版+测试图像和设计文档
[实例简介] 该文件包含了车牌识别的两个版本:matlab语音版+OpenCV版,有丰富的测试实例和文档信息,测试结果能满足大部分的车牌识别. [实例截图] [核心代码] 5d61aaaa-2457- ...
- 使用C#版OpenCV进行圆心求取
使用C#版OpenCV进行圆心求取 转载:https://www.cnblogs.com/tuyile006/p/10819570.html 具体代码为: https://download.csdn. ...
- Android版OpenCV图像处理技术亲自验证[三]之斑点检测ColorBlobDetector
Android版OpenCV图像处理技术亲自验证[二]之斑点检测ColorBlobDetector 程序之美 前言 主体 运行效果 构建过程 核心代码 所遇问题 结束语 程序之美 前言 OpenCV是 ...
- DM8168 OpenCV尝试与评估(编译ARM版OpenCV)
交叉编译opencv2.3.1,并在DM8168 cortex A8中执行图像处理. 开发环境: PC:ubuntu12.04LTS.Intel Core 2 Duo CPU E7200@2. ...
- opencv计算机视觉编程攻略 第2版,OpenCV计算机视觉编程攻略(第2版)pdf
摘要 1. 50多个知识点的案例解读,全面掌握基础知识与进阶内容 2. 学习OpenCV重要的图像操作类和函数 3. 初学者和从业者即查即用的工具书 4. 掌握计算机视觉与图像处理的基础知识与概念 O ...
- objective-c 2.0编程语言,Objective-C 2.0编程快速上手 EXE版[12MB]
Objective-C 2.0编程快速上手 内容简介: <Objective-C 2.0编程快速上手>是介绍Objective-C编程的基础教程.全书采用实例讲解.按部就班的方式,全面详细 ...
- Vue简单快速上手 idea版
文章目录 版本 插件安装和通过CDN使用Vue Vue的基本语法 v-bind 条件判断 循环 监听事件 表单双绑 1.什么是双向数据绑定 2.在表单中使用双向数据绑定 组件 什么是组件 第一个Vue ...
- 【C++版Opencv】【Ubuntu】VScode配置Opencv
1 安装基本工具 sudo apt install -y g++ sudo apt install -y cmake sudo apt install -y make sudo apt install ...
- JAVA版opencv透明,opencv 替换纯色背景为透明背景
最近在开发抠图项目,有个同事想抠除一种颜色,这个用opencv就很简单了,我用的opencv3,正好有foreach可以用,
最新文章
- 牛人是怎样用函数实现本地化测试的
- 构建之法第三章软件工程师的成长
- C#中File的使用
- wordpress相关插件及应用模板
- 7.01面试长沙黄花机场
- mysql InnoDB 聚集索引,二级索引
- 2013年第四届蓝桥杯C/C++ A组国赛 —— 第一题:填算式
- Google Guava并发– ListenableFuture
- Srping MVC入门推荐
- c语言中文刷屏,c语言二维数组刷屏练习.doc
- AnySDK项目实战教程
- Linux从入门到精通——数据库
- 测试象棋水平用哪个软件好,佳佳象棋软件作者李国来对象棋软件引擎的专业看法及测试指导...
- 华为虚拟机eNSP命令大全
- 虚函数表构成、地址详细说明
- 谷歌浏览器代理服务器出现问题怎么办?(最快的解决办法)
- html 批量pdf 打印,html转pdf打印
- antd中如何实现分页勾选记住之前的选项
- java学校举行运动会,百米赛跑跑入10 秒内的学生有资格进决赛,根据性别分别进入男子组和女子组使用if条件语句
- 初识Uniprot API
热门文章
- AndroidStudio - - - 点击头像更换头像_菜单选择_相机拍照与相册获取
- 看似简单的任务-分享二维码图片到微信(分享图片的生成)
- 工商管理专业知识与实务(初级)【2】
- 用python3实现MD5withRSA数字签名的验证
- 【微服务】Spring Cloud 基础
- python 海龟交易法则_【手把手教你】用Python量化海龟交易法则
- slg游戏客户端框架简析
- 玩转ECS第6讲 | 弹性计算 Region 化部署和跨可用区容灾介绍
- 逆向微信Mac客户端:微信情话助手初版
- 计算机教师幽默介绍,老师幽默的自我介绍6篇