
OpenCV
Thomas会写字
艰苦朴素
展开
-
Opencv 基于傅里叶变换的图片高光滤波处理
对比发现,高光部分 处理效果明显。原创 2022-12-28 17:05:47 · 493 阅读 · 0 评论 -
OpenCV 图片旋转与矩形旋转
注意:RotateRect的角度旋转正方向,顺时针。仿射变换中图片角度旋转正方向是逆时针。#include "cv.h"#include "opencv2/imgproc/imgproc.hpp"#include "highgui.h"#include "opencv.hpp"#include "iostream"using namespace cv;Mat src;int nAngle = 0;int nMaxAngle = 360;cv::RotatedRect rRect原创 2021-04-16 10:44:51 · 592 阅读 · 0 评论 -
OpenCV 绘制十字Mark标
void DrawCross(cv::Mat & mat, cv::Point2i ptCenter, cv::Scalar color, double dFactor){ double dAxisOffset = 12; double dAxisLen = 24 * 10 + 12 - dAxisOffset; // 坐标轴属性 0=Y+ 1=X+ 2=Y- 3=X- double dDirX[] = { 0, 1, 0, -1 }; double dDirY[] = { -1, .原创 2020-12-29 17:21:14 · 2101 阅读 · 0 评论 -
OpenCV 写视频文件
cv::string sFileName = "first.avi"; int nFourcc = CV_FOURCC('M', 'J', 'P', 'G'); int nFps = 30; cv::Size nFrameSize = cv::Size(mat.cols, mat.rows); cv::VideoWriter video; video.open(sFileName, nFourcc, nFps, nFrameSize, true); cv::cvtColor(mat, mat..原创 2020-12-29 17:10:03 · 257 阅读 · 0 评论 -
OpenCV reduce 按行、列计算图像的最大、最小、平均、求和数值
参考 文章1 文章2一、函数定义CvSize CvReduce(//完毕由op指定的约简 const CvArr* src,//目标矩阵 CvArr* dst,//结果矩阵 int dim = -1,//因子系数,//1合并成行,0合并成列。-1转化成相应的dis int op = CV_REDUCE_SUM,//指定约简法则 int dtype=-1// 如果结果矩阵没有初始化时输出数据类型);op的值 结果 CV_REDUCE_SUM 计算全部向量的总和转载 2020-08-20 17:13:29 · 3524 阅读 · 1 评论 -
OpenCV 读取一个文件夹下所有图片
std::vector<cv::String> image_files; //cv::glob("K:\\OCR\\*.*", image_files);原创 2020-08-20 16:44:09 · 1522 阅读 · 0 评论 -
OpenCV 通过ROI复制图片不规则区域
1. 前半部分代码代码连接#include <cstdio>#include <opencv2\opencv.hpp>#include "cMyFunc.h"using namespace cv;using namespace std;#define PI 3.1415926535898int main(int argc, char** argv){ // 前半部分代码 Mat img = imread("1.png"); cMyFunc func;.原创 2020-07-25 13:56:32 · 662 阅读 · 0 评论 -
OpenCV 简单马赛克实现
void MaskImg(Mat & img1_0){ int nSize = 3; // 马赛克方块大小 int nThr = 120; for (int i = 0; i < img1_0.rows / nSize; i++) { for (int j = 0; j < img1_0.cols / nSize; j++) { Mat matTmp = img1_0(Rect(i* nSize, j * nSize, nSize, nSize)); Sc.原创 2020-07-25 11:34:41 · 427 阅读 · 0 评论 -
OpenCV 计算物体外切正矩形
cv::Point2f GetPointAfterRotate(cv::Point2f InputPt, cv::Point2f center, float angle){ cv::Point2f preturn; preturn.x = (InputPt.x - center.x)*cos(-angle) - (InputPt.y - center.y)*sin(-angle) + center.x; preturn.y = (InputPt.x - center.x)*sin(-angle) .转载 2020-07-25 11:16:43 · 762 阅读 · 1 评论 -
OpenCV学习三十五:distanceTransform 距离变换函数
1. API该函数有两个初始化APIC++: void distanceTransform(InputArray src, OutputArray dst, int distanceType, int maskSize)C++: void distanceTransform(InputArray src, OutputArray dst, OutputArray labels,...原创 2018-10-08 14:28:38 · 19339 阅读 · 6 评论 -
OpenCV学习三十四:watershed 分水岭算法
1. watershed void watershed( InputArray image, InputOutputArray markers );第一个参数 image,必须是一个8bit 3通道彩色图像矩阵序列,第一个参数没什么要说的。关键是第二个参数 markers:在执行分水岭函数watershed之前,必须对第二个参数markers进行处理,它应该包含不同区域的轮廓,每...原创 2018-10-08 11:39:40 · 14209 阅读 · 8 评论 -
OpenCV学习三十三:pointPolygonTest 检测点是否在轮廓内
opencv函数pointPolygonTest:C++: double pointPolygonTest(InputArray contour, Point2f pt, bool measureDist)用于测试一个点是否在多边形中当measureDist设置为true时,返回实际距离值。若返回值为正,表示点在多边形内部,返回值为负,表示在多边形外部,返回值为0,表示在多边形上。...原创 2018-08-23 16:49:12 · 37154 阅读 · 0 评论 -
OpenCV学习三十二:HU矩以及Zernike矩
cv::moments (InputArray array,bool binaryImage = false)array:输入数组,可以是光栅图像(单通道,8-bit或浮点型二维数组),或者是一个二维数组(1 X N或N X 1),二维数组类型为Point或Point2f(我记得这里输入二值图片和 FindContours 的结果 contours[i]逐个输入 都可以)bi...原创 2018-08-22 16:50:54 · 6764 阅读 · 3 评论 -
OpenCV学习三十一:resize 图片缩放函数
先解释一下各个参数的意思:src:输入,原图像,即待改变大小的图像;dst:输出,改变大小之后的图像,这个图像和原图像具有相同的内容,只是大小和原图像不一样而已;dsize:输出图像的大小。如果这个参数不为0,那么就代表将原图像缩放到这个Size(width,height)指定的大小;如果这个参数为0,那么原图像缩放之后的大小就要通过下面的公式来计算:dsize = Size(round(fx*s...原创 2018-06-30 09:46:41 · 1800 阅读 · 0 评论 -
OpenCV学习三十:approxPolyDP 多边拟合函数
approxPolyDP 主要功能是把一个连续光滑曲线折线化,对图像轮廓点进行多边形拟合。原理图:对比之前黑点连线,之后蓝色连线:C++: void approxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed)参数详解;InputArray curve:一般是由图像的轮廓点组成的点集Outp...原创 2018-04-05 11:40:06 · 68399 阅读 · 5 评论 -
OpenCV学习二十九:convexHull 凸包
1.概述凸包(Convex Hull)是一个计算几何(图形学)中的概念,在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。 X的凸包可以用X内所有点(x1, x2….xn)的线性组合来构造。在二维欧几里得空间中,凸包可以想象为一条刚好包着所有点的橡皮圈,用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它能包含点集中所有的点。常见的有...原创 2018-03-24 12:10:40 · 1967 阅读 · 0 评论 -
OpenCV学习二十八:findcontours以及drawcontours练习
1. void findContours1.1 概述void findContours//提取轮廓,用于提取图像的轮廓(InputOutputArray image,//输入图像,必须是8位单通道图像,并且应该转化成二值的OutputArrayOfArrays contours,//检测到的轮廓,每个轮廓被表示成一个point向量OutputArray hierarchy,//可选的输出向量,包含...原创 2018-03-20 05:51:57 · 1021 阅读 · 0 评论 -
OpenCV学习二十七:两种通过 createTrackbar 实现对同一函数中多参数实时调用改变的方法
createTrackbar 中关于跳动参数的那个变量是指针类型,说明是通过地址改变原变量的值,因此不需要 createTrackbar 中调用的函数体传入该改变的变量,只需要实时计算并显示结果即可。因此基于这个思路写出两种对 Canny 函数中两个阈值实时调控更改的方法。方法一:主函数中创建多个 createTrackbar 函数。#include <opencv2/opencv.hpp&...原创 2018-03-18 09:41:16 · 855 阅读 · 0 评论 -
OpenCV学习二十六:matchTemplate,模板匹配
介绍两个函数void cvMinMaxLoc(//取出矩阵中最大最小值const CvArr* arr,//目标矩阵double* min_val,//最小值double* max_val,//最大值CvPoint* min_loc = NULL,//最小值位置CvPoint* max_loc = NULL,//最大值位置const CvArr* mask = NULL//矩阵“开...原创 2018-03-13 06:07:04 · 3015 阅读 · 0 评论 -
OpenCV学习二十五:calcBackProject 直方图反射函数
如果一幅图像的区域中显示的是一种结构纹理或者一个独特的物体,那么这个区域的直方图可以看作一个概率函数,他给的是某个像素属于该纹理或物体的概率。所谓反向投影就是首先计算某一特征的直方图模型,然后使用模型去寻找测试图像中存在的该特征。void cv::calcBackProject (const Mat * images, int nimages,const int * channels...原创 2018-03-12 08:58:46 · 1673 阅读 · 0 评论 -
OpenCV学习二十四: compareHist 基于直方图的图片相似度计算函数
函数的使用很简单,直接把 OpenCV 的官方文档截取过来吧,主要是。。。懒了。。。#include <opencv2/opencv.hpp> #include <stdio.h> #include <stdlib.h> #include <iostream>using namespace cv; using namespace ...原创 2018-03-07 21:01:22 · 6727 阅读 · 0 评论 -
HSV介绍三:关于 HSV 各通道在 OpenCV 中取值范围的确定(汇总)
看了很多关于 HSV 介绍的帖子,从它锥形的钻换模型中可以理解到: hue 通道的取值范围就应该是 0-360。但是在看各网友的帖子中看到了各种关于 hue 通道不同取值范围的应用。并且也没有一个说出来在 OpenCV 中 HSV 的各通道取值范围是多少,到底为什么。为此我专门去看了下 OpenCV 的官方文档,于是在关于 calcHist 的函数介绍中看到了这个这个意思是说 hue 的取值范围是...原创 2018-03-07 20:33:38 · 13714 阅读 · 3 评论 -
HSV介绍二:HSV颜色识别-HSV基本颜色分量范围
一般对颜色空间的图像进行有效处理都是在HSV空间进行的,然后对于基本色中对应的HSV分量需要给定一个严格的范围,下面是通过实验计算的模糊范围(准确的范围在网上都没有给出)。H: 0 — 180S: 0 — 255V: 0 — 255此处把部分红色归为紫色范围: 目前在计算机视觉领域存在着较多类型的颜色空间(color space)。...转载 2018-03-07 20:18:01 · 70308 阅读 · 3 评论 -
HSV介绍一:RGB、YUV和HSV颜色空间模型
一、概述颜色通常用三个独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐标,这就是颜色空间。但被描述的颜色对象本身是客观的,不同颜色空间只是从不同的角度去衡量同一个对象。颜色空间按照基本机构可以分为两大类:基色颜色空间和色、亮分离颜色空间。前者典型的是RGB,后者包括YUV和HSV等等。二、RGB颜色空间1、计算机色彩显示器和彩色电视机显示色彩的原理一样,都是采用R、G、B相...转载 2018-03-06 19:32:30 · 5691 阅读 · 0 评论 -
OpenCV学习二十三:calcHist,直方图
其中C++的函数原型如下:void calcHist(const Mat* arrays, int narrays, const int* channels, InputArray mask, OutputArray hist, int dims, const int* histSize, const float** ranges, bool uniform=true, bool accumu...原创 2018-03-03 17:13:36 · 555 阅读 · 0 评论 -
OpenCV学习二十二:remap 重映射
C++:void remap(InputArray src, OutputArray dst, InputArray map1, InputArray map2, int interpolation, intborderMode = BORDER_CONSTANT, const Scalar& borderValu...原创 2018-03-03 07:20:36 · 537 阅读 · 0 评论 -
OpenCV学习二十一:HoughLines 、HoughLinesP、HoughCircles 霍夫直线与霍夫圆
霍夫直线有两个函数,HoughLines 与 HoughLinesP,第一个是得到极坐标输出,第二个得到直角坐标系中直线的首位两点集合。HoughLines : 它是如何实现的? 众所周知, 一条直线在图像二维空间可由两个变量表示. 例如: 在 笛卡尔坐标系: 可由参数: 斜率和截距表示. 在 极坐标系: 可由参数: 极径和极角表示 对于霍夫变换, 我们将用 极坐标...原创 2018-02-27 15:30:43 · 1941 阅读 · 0 评论 -
OpenCV学习二十:canny 算子学习
懒了,就这样吧#include <opencv2/opencv.hpp> #include <stdio.h> #include <stdlib.h> using namespace cv; using namespace std; char file[] = "1.jpg";int main(int argc, char** argv...原创 2018-02-26 11:17:43 · 276 阅读 · 0 评论 -
OpenCV学习十九:Laplacian 拉普拉斯算子
使用中心为5的8邻域拉普拉斯算子与图像卷积可以达到锐化增强图像的目的,拉普拉斯算子如下图所示: 这个好像不对,大概是这意思吧Laplacian( src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT );src_gray: 输入图像。dst: 输出图像ddepth: 输出图像的深度。 因为输入图像的深度是 C...原创 2018-02-26 10:43:02 · 9984 阅读 · 0 评论 -
OpenCV学习十八:sobel 、scharr 边缘检测算子
Sobel 算子是一个离散微分算子 (discrete differentiation operator)。 它结合了高斯平滑和微分求导,用来计算图像灰度函数的近似梯度。 图像边缘,相素值会发生显著的变化了。表示这一改变的一个方法是使用 导数 。 梯度值的大变预示着图像中内容的显著变化。用更加形象的图像来解释,假设我们有一张一维图形。下图2中灰度值的”跃升”表示边缘的存在,...原创 2018-02-24 16:03:28 · 2119 阅读 · 0 评论 -
OpenCV学习十七:OpenCV中Mat的type
opencv中Mat存在各种类型,其中mat有一个type()的函数可以返回该Mat的类型。类型表示了矩阵中元素的类型以及矩阵的通道个数,它是一系列的预定义的常量,其命名规则为CV_(位数)+(数据类型)+(通道数)。具体的有以下值: 1.Unsigned 8bits(一般的图像文件格式使用的大小)IplImage数据结构参数:IPL_DEPTH_8UCvMat数据结构参数:CV_8UC1,CV_...转载 2018-02-24 11:12:03 · 6683 阅读 · 6 评论 -
OpenCV学习十六:copyMakeBorder 边缘处理
void copyMakeBorder(InputArray src, 输入OutputArray dst, 输出int top, 上边框int bottom, 下边框int left, 左边框int right, 右边框int borderType, 边框类型const Scalar& value=Scalar() 填充颜色)常用的边框类型:BORDER_CO...原创 2018-02-24 10:26:02 · 1036 阅读 · 0 评论 -
OpenCV学习十五:filter2D 线性滤波
简单介绍下函数:filter2D(输入,输出,卷积核,锚点),其中锚点Point(-1,-1)表示中心。介绍几个滤波器:#include <opencv2/opencv.hpp> #include <stdio.h> #include <stdlib.h> using namespace cv; using namespace std; ...原创 2018-02-23 16:47:35 · 1209 阅读 · 0 评论 -
adaptiveThreshold自适应二值化源码分析
自适应二值化介绍:二值化算法是用输入像素的值I与一个值C来比较,根据比较结果确定输出值。自适应二值化的每一个像素的比较值C都不同,比较值C由这个像素为中心的一个块范围计算在减去差值delta得到。C的常用计算方法有两种: 1.平均值减去差值delta(使用盒过滤boxfilter,性能会非常不错) 2.高斯分布加权和减去差值delta (使用高斯滤波GaussionBlur) 只要高兴用什么...转载 2018-02-23 16:14:35 · 1356 阅读 · 1 评论 -
OpenCV学习十四:threshold、adaptiveThreshold 阀值
threshold( cv::InputArray src, // 输入图像 cv::OutputArray dst, // 输出图像 double thresh, // 阈值 double maxValue, // 向上最大值 int thresholdType // 阈值化操作的类型 ); 几种操作类型,前五个对应下面原理图:...原创 2018-02-23 15:30:40 · 800 阅读 · 0 评论 -
OpenCV学习十三:pryUp、pryDown 上采样、降采样以及 高斯不同
pryUp:上采样,图像放大一倍;pryDown:降采样,图像缩小一倍。降采样原理:1. 将原图像进行高斯模糊2. 删除偶数行/列的图像。高斯不同是图像的内在特征,在绘图图像增强、角点检测中经常用到。高斯不同:1. 得到一次高斯模糊图像;2. 得到二次高斯模糊图像;3. 用一次高斯模糊图像减去二高斯模糊图像。#include <opencv2/opencv.hpp> #includ...原创 2018-02-23 13:43:20 · 1817 阅读 · 0 评论 -
OpenCV学习十二:morphologyEx,图像的开运算、闭运算、顶帽运算、黑帽运算以及形态学梯度
开运算---先腐蚀,后膨胀。去除图像中小的亮点(CV_MOP_OPEN);闭运算---先膨胀,后腐蚀。去除图像中小的暗点(CV_MOP_CLOSE);形态学梯度---原图膨胀图像 — 原图腐蚀图像(CV_MOP_GRADIENT);顶帽---原图像 — 原图像开操作。保留小亮点,去除大亮点。(CV_MOP_TOPHAT);黑帽---原图像闭操作 — 原图像(CV_MOP_BLACKHAT);api...原创 2018-02-14 10:15:11 · 14830 阅读 · 0 评论 -
OpenCV学习十一:dilate、erode 膨胀及腐蚀
膨胀及腐蚀,函数很简单,就写了个Demo定义:膨胀---图像膨胀的过程类似于一个卷积的过程,假设有图像矩阵A以及结构元素B(注意,B的形状、尺寸没有限制),B在A矩阵上依次移动,每个位置上B所覆盖元素的最大值替换B的中心位置值(即锚点处),即为膨胀的过程。腐蚀---腐蚀的过程与膨胀一致,区别在于用最小值替换中心位置值。# include<stdio.h># incl...原创 2018-02-13 10:54:14 · 14792 阅读 · 0 评论 -
OpenCV学习十:blur、GaussianBlur、medianBlur 、bilateralFilter 图片的模糊、高斯模糊、中值模糊、二值滤波(课程里将模糊与滤波认定为一样) 以及 锐化算子
bilateralFilter 函数说明双边滤波是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空间与信息和灰度相似性,达到保边去噪的目的,具有简单、非迭代、局部处理的特点。之所以能够达到保边去噪的滤波效果是因为滤波器由两个函数构成:一个函数是由几何空间距离决定滤波器系数,另一个是由像素差值决定滤波器系数。 双边滤波器中,输出像素的值依赖于邻域像素的值的...原创 2018-01-31 16:45:58 · 1525 阅读 · 0 评论 -
OpenCV学习九:line、rectangle、ellipse 、circle、fillPoly 绘制直线、矩形、椭圆、圆形、填充任意图形
#include <stdio.h>#include <opencv2/opencv.hpp>using namespace std;using namespace cv;int main(int argc, char** argv){ //line ellipse rectangle circle fillPoly Mat Pic = Mat::ze...原创 2018-01-25 18:05:11 · 2387 阅读 · 0 评论