CV 随堂学习笔记
学习图像处理基础知识和相关经典算法,并深入研究流行鲁棒算法
M海洋
博士研究生
展开
-
opencv:图像纵向编辑文字
本节继续介绍在图像上编辑文字,可能大家会觉得怎么还是编辑文字,是不是凑数的。你说对了,我也是这么觉得,不过不是凑数,而是自己觉得好玩,话不多说上代码#include <opencv2/opencv.hpp>#include<iostream>#include "putTextC.h"using namespace cv;using namespace std;void main(){ Mat img = imread("dog.jpg"); imshow("原图", img原创 2020-07-12 19:20:11 · 910 阅读 · 0 评论 -
opencv:之图像指定区域添加中文
由于opencv中的putText函数不支持添加中文,所以我们今天介绍一个可以添加中文的类函数,该函数支持各种中文字体,我们把该类函数定义为putTextC。其包含putTextC.pp,putTextC.h两个文件。putTextC.pp#include "putTextC.h"void GetStringSize(HDC hDC, const char* str, int* w, int* h){ SIZE size; GetTextExtentPoint32A(hDC, st原创 2020-07-11 21:09:16 · 1095 阅读 · 0 评论 -
opencv:图像上编辑文字
本堂小课介绍图像的编辑,在图像编辑文字,强大的opencv不仅除了各种绘制图形的函数之外,还有在图像上绘制文字的函数–putText函数。如下为putText函数:putText( Mat& img, const string& text, Point orgin, int fontFace,double fontScale, Scalar color, int thickness=1, int lineType=8, );参数: Mat& img:绘制文字的图像原创 2020-07-10 17:07:07 · 795 阅读 · 0 评论 -
opencv:图像的腐蚀与膨胀实现
腐蚀和膨胀是对白色部分(高亮部分)而言的,不是黑色部分。膨胀就是图像中的高亮部分进行膨胀,“领域扩张”,效果图拥有比原图更大的高亮区域。腐蚀就是原图中的高亮部分被腐蚀,“领域被蚕食”,效果图拥有比原图更小的高亮区域。膨胀与腐蚀能实现多种多样的功能,主要如下: 消除噪声 分割(isolate)出独立的图像元素,在图像中连接(join)相邻的元素。 寻找图像中的明显的极大值区域或极小值区域 求出图像的梯度 opencv中使用到的函数:getStructuringEle原创 2020-07-06 18:21:23 · 1197 阅读 · 1 评论 -
opencv:基于opencv的五种滤波方法
图像滤波指的是在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像处理中不可缺少的一项操作。根据空间滤波增强目的可分为:平滑滤波和锐化滤波;平滑滤波,能减弱或消除图像中的高频分量,但不影响低频分量,锐化滤波,能减弱或消除图像中的低频分量,但不影响高频分量。根据空间滤波的特点可分为:线性滤波和非线性滤波。下面是常用的一些滤波器及在opencv中对应的函数,分为线性滤波和非线性滤波 方框滤波–> boxblur函数来实现 –>线性滤波 均值滤波(邻域平均滤波)–&g..原创 2020-07-05 20:32:43 · 7405 阅读 · 0 评论 -
opencv:之图像指定区域绘制圆
本文将会介绍在一副图像的指定区域画圆,上一节介绍的是在图像指定区域画矩形,在图像上画圆和画矩形原理相近,只是用到的函数不同,画圆用到的opencv的函数为circle函数:circle(Mat img, Point center, int radius, Scalar color, int thickness=1, int lineType=8, int shift=0)函数的各个参数功能: img为源图像 center为画圆的圆心坐标 radius为圆的半径原创 2020-07-03 19:53:18 · 2349 阅读 · 0 评论 -
opencv:图像指定区域绘制矩形框
矩形框在图像领域很是常见,特别是在目标识别,目标跟踪经常需要给识别和跟踪的目标绘制矩形框做个标记。相信很多人应该对这种图像都不陌生,特别实在如今智能领域快速的发展,相机的智能识别,人脸识别等都需要对自己的识别出的目标做标记来明显的展示自己的识别结果。下面我们将展示矩形框实现的示例代码:#include <opencv2/opencv.hpp>#include<iostream>using namespace std;using namespace cv;void mai原创 2020-07-01 15:50:07 · 3304 阅读 · 2 评论 -
opencv:图像填充
在图像处理中,经常需要在图像的指定区域替换成另一幅图像,如何通过opencv实现这种效果呢?下面就让我们进行具体介绍。实现这个功能简单分为两个步骤:1、首先在图像中设置ROI(region of interest,目标区域),2、在该区域填充目标图像。 有了思路,我们的主要工作就是考虑如何把它们转化成机器语言。 让我们看看下面的一段代码代码:#include <opencv2/opencv.hpp>#include<iostream>using name...原创 2020-06-30 19:42:08 · 1639 阅读 · 0 评论 -
opencv:图像的缩放函数resize
图像的缩放在图像处理中比较常见,在opencv中图像缩放函数是resize函数,该函数可以采用最邻近插值点法、双线性插值法、邻域像素再取样插补、立方插补四种插值算法对图像进行插值,下面我们将介绍resize函数的各个参数功能以及使用resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR)参数功能:src:输入图dst:输出图,形原创 2020-06-29 18:47:43 · 1218 阅读 · 1 评论 -
opencv:之flip实现图像旋转
今天为小主们介绍关于图像的旋转,在opencv中我们可以实现图像的水平、垂直和任意角度的旋转。下面会详细介绍图像的水平、垂直和水平垂直旋转的实现 图像的水平、垂直、水平出垂直旋转实现图像的水平或者垂直旋转我们只需要应用OpenCV中的flip函数,flip函数用来进行图片的翻转,包括水平翻转,垂直翻转,以及水平垂直翻转。flip(const Mat& ...原创 2020-06-27 21:08:13 · 1151 阅读 · 0 评论 -
opencv:视频的创建与写入
本文详细介绍视频的创建与写入;视频的写入主要用到VideoWriter类中放入 writer函数。writer(const char* filename, int fourcc, double fps, CvSize frame_size, int is_color=1) filename:读取视频文件路径 fourcc:为四个字符用来表示压缩帧的codec 例如: CV_FOURCC('P','I','M','1') = MPEG-1 codecCV_FOURCC('M','原创 2020-06-26 14:57:58 · 844 阅读 · 0 评论 -
基于opencv的几种图像边缘检测f
本文主要介绍几种常见的边缘检测算法:canny边缘检测、Sobel边缘检测、Laplacian边缘检测和Scharr边缘检测。1. 主要介绍基于canny算子的边缘检测:Canny边缘检测基本原理(1)图象边缘检测必须满足两个条件:一能有效地抑制噪声;二必须尽量精确确定边缘的位置。(2)根据对信噪比与定位乘积进行测度,得到最优化逼近算子。这就是Canny边缘检测算子。(3)类似与Marr(LoG)边缘检测方法,也属于先平滑后求导数的方法。基于opencv库函数为:Canny边缘.原创 2020-06-23 16:43:42 · 969 阅读 · 0 评论 -
opencv:视频读取的两种方法
本文介绍视频的读取与显示,opencv视频读取有很多种方法,我们主要介绍两种常用的方法,首先介绍视频读取用到的函数:capture():capture函数是Videocapture类的一个读取视频或摄像头的函数,capture输入不同参数读取方式不同: capture.open("xxx.avi");//利用初始化的capture,打开视频"xxx.avi",视频格式也可以为MP4格式 capture.open(0);//利用初始化的capture,打开ID为0的摄像头 cap原创 2020-06-21 12:02:03 · 6088 阅读 · 0 评论 -
基于opencv创建滑动条
本文介绍关于创建滑动条的函数createTrackbar,我们以图像的二值化为例嵌入滑动条,滑动条作用:通过改变滑动条的位置来改变函数里面变量的值。下面我们介绍滑动条函数的各个参数功能: createTrackbar(const string& trackbarname,const string&winname,int* value,int count,TrackbarCallback onChange = 0, void* userdata = 0); ...原创 2020-06-21 08:48:49 · 330 阅读 · 0 评论 -
opencv:图像的灰度转换
本介绍彩色图像到灰度图像的转换,opencv提供了cvtColor函数用于图像颜色控件转换,可以实现RGB颜色、HSV颜色、HSI颜色、lab颜色、YUV颜色等转换,也可以彩色和灰度互相转换。下面介绍cvtColor函数各个参数的功能:void cv::cvtColor( cv::InputArray src, // 输入序列 cv::OutputArray dst, // 输出序列 int code, // 颜色映射码 int dstCn ...原创 2020-06-19 21:25:14 · 2698 阅读 · 0 评论 -
opencv:图像二值化的实现
本文详细介绍基于opencv的图像二值化,图像二值化即是设置一个阈值T,如果图像像素点的灰度值小于T此点值设为0(黑),反之设为255(白),最后图像只有黑和白两种颜色。opencv中的二值化函数有两种,阈值化的图像二值化,自适应阈值化的二值化,我们接下来先介绍两种二值化函数:1、阈值化函数:cvThreshold (constCvArr* src, CvArr* dst, double threshold,doublemax_value,int threshold_type) sr...原创 2020-06-18 20:18:52 · 3272 阅读 · 0 评论 -
opencv:彩色图像到灰度图像的转换与保存
本文详细介绍基于opencv的彩色图像到灰度图像的转换和图像的保存首先介绍要用到的两个关键的opencv函数,cvtColor(InputArray src, OutputArray dst, int code, int dstCn = 0)和imwrite(const String & filename,InputArray img,conststd::vector<int> & params =std::vector<int>())cv...原创 2020-06-17 16:41:52 · 2626 阅读 · 0 评论 -
opencv:图像的读取和显示
本文介绍如何使用opencv读取和显示图像,如下是读取一帧彩色图像的代码:#include <opencv2/opencv.hpp>using namespace cv;void main(){ Mat image; image = imread("C:\\Users\\mengh\\Desktop\\img.jpg"); imshow("show image", image); waitKey();}显示图像为下面我们将对代码中读取图像和...原创 2020-06-14 11:37:30 · 1798 阅读 · 0 评论 -
opencv4.1+VS2015配置
配置方式有两种:1、全局配置:按此方式配置后,以后新建项目不必再重复配置。2、单项目配置:按此方式配置后,以后新建项目需要再重新为新建项目配置。1、全局配置打开VS20152、新建一个任意项目,新建项目方式两种,(1)点击“文件”选择新建(2)点击VS界面点击界面上“新建项目”3、选中新建界面的空项目,并在名称对应的框中输入项目名(注:项目名最好不要用中文,不然可能会有未知问题)然后点击确定。4、然后会出现项目界面,我们创建了一个test项目5、我们选中te.原创 2020-06-14 08:29:30 · 275 阅读 · 0 评论 -
opencv的下载与安装
第一步:opencv的下载,下载网址:https://github.com/opencv/opencv/releases。里面有各个版本。下载自己需要的。第二步:opencv的安装,本文以opencv4.1为例进行安装。opencv所有版的安装步骤都大同小异。我们根据自己需要选择适合自己的版本,不必纠结安装步骤的问题。(1)双击opencv的安装包会出现安装选项界面(2)根据自己需要,选择opencv安装位置,点击三个点,选择安装路径,我安装到了F:\opencv\文件夹原创 2020-06-13 09:52:20 · 14643 阅读 · 2 评论