OpenCV
文章平均质量分 55
OpenCV学习笔记
txwtech笛克电科
like C++/QT/OpenCV/C#/
cdtxw@foxmail.com
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
opencv中旋转角度使用atan函数或atan2函数计算角度
摘要:本文介绍了两种计算图像中直线角度的方法。第一种使用霍夫变换检测直线,通过atan2函数计算斜率角度并转换为度数;第二种通过轮廓分析,先检测边缘再寻找最小外接矩形计算旋转角度。文章重点比较了atan和atan2函数的区别,指出atan2能处理分母为零的情况,推荐使用atan2。两种方法均实现了图像旋转校正功能,并提供了完整的OpenCV代码实现,包括图像预处理、边缘检测、角度计算和旋转校正等步骤。原创 2025-10-09 10:08:52 · 327 阅读 · 0 评论 -
img.dims() <= 2 in function ‘cv::matchTemplate报错
在使用OpenCV的matchTemplate函数时,如果源图像和模板图像的色彩空间不一致,会导致函数报错。具体表现为error:(-215:Assertionfailed),提示图像深度或类型不匹配。解决方法是在调用matchTemplate之前,确保源图像和模板图像都转换为相同的色彩空间,例如使用cvtColor函数将图像从BGR格式转换为RGB格式。这样可以避免因色彩空间不一致而导致的错误,确保matchTemplate函数能够正确执行。原创 2025-05-17 21:28:37 · 418 阅读 · 0 评论 -
opencv CV_TM_SQDIFF未定义标识符
部分命名发生变换,将CV_WINDOW_AUTOSIZE。opencv CV_TM_SQDIFF未定义标识符。改为TM_SQDIFF_NORMED。改为WINDOW_AUTOSIZE。原创 2025-01-06 11:55:52 · 463 阅读 · 0 评论 -
opencv python投影变换效果
p_touyin = cv2.getPerspectiveTransform(src2,dst2) #计算投影变换矩阵。#利用矩阵值进行图像投影变换。dst2转换后,4个坐标点。src2原图,4个坐标点。原创 2024-02-21 11:44:24 · 1086 阅读 · 0 评论 -
OpenCV Error: Assertion failed, line 7564
OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cv::cvtColor, file C:\builds\master_PackSlave-win64-vc12-shared\opencv\modules\imgproc\src\color.cpp, line 7564cvtColor(src, dst, CV_BGR2GRAY);//, src为空,未赋值原创 2021-05-27 15:47:17 · 336 阅读 · 1 评论 -
OpenCV26HoughCircles 霍夫圆变换原理及圆检测
原文链接:https://www.cnblogs.com/txwtech/p/14711174.html霍夫圆变换的基本原理与霍夫线变换大体类似对直线来说,一条直线能由极径极角(r,θ)表示,而对于圆来说,我们需要三个参数:圆心(a,b),半径 r笛卡尔坐标系中圆的方程为:(x-a)2+ (y-b)2= r2化简便可得到:a = x- r·cosθb = y- r·sinθ对于(x0,y0),我们可以将通过这一点的所有圆统一定义为:a = x0- r·co...原创 2021-04-27 22:41:36 · 1090 阅读 · 0 评论 -
OpenCV25-判断一个点是否在多边形的内部_点多边形测试pointPolygonTest
/*OpenCV25-判断一个点是否在多边形的内部_点多边形测试pointPolygonTestopencv函数by txwtechpointPolygonTest:C++: double pointPolygonTest(InputArray contour, Point2f pt, bool measureDist)用于测试一个点是否在多边形中当measureDist设置为true时,返回实际距离值。若返回值为正,表示点在多边形内部,返回值为负,表示在多边形外部,返回值为0,表示在..原创 2021-04-26 22:57:25 · 1134 阅读 · 0 评论 -
OpenCV24霍夫直线变换API介绍
/*OpenCV24霍夫直线变换API介绍by txwtech霍夫变换(Hough Transform)于1962年由Paul Hough 首次提出,后于1972年由Richard Duda和Peter Hart推广使用,是图像处理领域内从图像中检测几何形状的基本方法之一。经典霍夫变换用来检测图像中的直线,后来霍夫变换经过扩展可以进行任意形状物体的识别,例如圆和椭圆。霍夫变换运用两个坐标空间之间的变换,将在一个空间中具有相同形状的曲线或直线映射到另一个坐标空间的一个点上形成峰值,从而把检测任意形状的原创 2021-04-25 21:18:41 · 311 阅读 · 0 评论 -
OpenCV23在一个物体上绘制椭圆与矩形_轮廓周围绘制矩形
/*OpenCV23在一个物体上绘制椭圆与矩形_轮廓周围绘制矩形by txwtech轮廓周围绘制矩形 -APIapproxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed)基于RDP算法实现,目的是减少多边形轮廓点数cv::boundingRect(InputArray points)得到轮廓周围最小矩形左上交点坐标和右下角点坐标,绘制一个矩形cv:...原创 2021-04-20 22:23:26 · 503 阅读 · 0 评论 -
OpenCV22轮廓发现
/*OpenCV22轮廓发现by txwtech简介:轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法,所以边缘提取的阈值选定会影响最终轮廓发现结果。1.Opencv发现轮廓的函数原型为:findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> image, contours, hierarchyimage参数表示8位单通道图像矩阵,可以是灰度图,但更常用的是二值图像,一般是经过Canny、拉原创 2021-04-19 21:25:17 · 414 阅读 · 0 评论 -
OpenCV21Canny边缘检测算法介绍
opencv3.0/*cv21Canny边缘检测by txwtechCanny边缘检测是一种非常流行的边缘检测算法,是John Canny在1986年提出的。它是一个多阶段的算法,即由多个步骤构成。切记canny的输入原图像是8位灰度图像,所有输入是彩色图像是需要用cvColor转灰度图像1.图像降噪2.计算图像梯度3.非极大值抑制4.阈值筛选首先,图像降噪。我们知道梯度算子可以用于增强图像,本质上是通过增强边缘轮廓来实现的,也就是说是可以检测到边缘的。但是,它们受噪声的原创 2021-04-18 21:57:24 · 784 阅读 · 0 评论 -
OpenCV20模板匹配(Template Matching)算法
/*cv20 by txwtech——opencv3.0模板匹配(Template Matching)算法模板匹配(Template Matching)是图像识别中最具代表性的方法之一。它从待识别图像中提取若干特征向量与模板对应的特征向量进行比较,计算图像与模板特征向量之间的距离,用最小距离法判定所属类别。模板匹配通常事先建立好标准模板库。模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域。所以模板匹配首先需要一个模板图像T(给定的子图像)另外需要一个待检测的图像-源图像S原创 2021-04-16 23:05:31 · 2133 阅读 · 4 评论 -
OpenCV19_laplance拉普拉斯算子_边缘检测_提取边缘
/*cv19by txwtech一、laplance拉普拉斯算子_边缘检测在二阶导数的时候,最大变化处的值为零即边缘是零值。通过二阶导数计算,依据此理论我们可以计算图像二阶导数,提取边缘。定义:void cv::Laplacian ( InputArray src,OutputArray dst,int ddepth,int ksize = 1,double scale = 1,double delta = 0,int ...原创 2021-04-14 21:35:35 · 992 阅读 · 0 评论 -
OpenCV18Sobel算子卷积应用-图像边缘提取
/*cv18Sobel算子卷积应用-图像边缘提取prepared by txwtechSobel算子卷积应用-图像边缘提取边缘是什么 – 是像素值发生跃迁的地方,是图像的显著特征之一,在图像特征提取、对象检测、模式识别等方面都有重要的作用。如何捕捉/提取边缘 – 对图像求它的一阶导数delta = f(x) – f(x-1), delta越大,说明像素在X方向变化越大,边缘信号越强,Sobel算子,卷积操作是离散微分算子(discrete differentiation oper.原创 2021-04-13 22:11:36 · 604 阅读 · 0 评论 -
OpenCV17边缘填充_边缘处理_解决卷积边缘像素无法处理的问题
/*cv17prepared by txwtech卷积边缘问题图像卷积的时候边界像素,不能被卷积操作,原因在于边界像素没有完全跟kernel重叠,所以当3x3滤波时候有1个像素的边缘没有被处理,5x5滤波的时候有2个像素的边缘没有被处理。处理边缘在卷积开始之前增加边缘像素,填充的像素值为0或者RGB黑色,比如3x3在四周各填充1个像素的边缘,这样就确保图像的边缘被处理,在卷积处理之后再去掉这些边缘。openCV中默认的处理方法是: BORDER_DEFAULT,此外常用的还有原创 2021-04-12 22:11:56 · 996 阅读 · 0 评论 -
OpenCV16卷积概念Rober算子sobel算子拉普拉斯算子用法
/*cv16prepared by txwtech自定义线性滤波卷积概念作用:1.模糊图像,降噪 2. 边缘提取 3.图像锐化,增显卷积是图像处理中一个操作,是kernel在图像的每个像素上的操作。Kernel本质上一个固定大小的矩阵数组,其中心点称为锚点(anchor point)卷积如何工作把kernel放到像素数组之上,求锚点周围覆盖的像素乘积之和(包括锚点),用来替换锚点覆盖下像素点值称为卷积处理。常见算子Rober算子sobel算子拉普拉斯算子--边缘检测的算子自原创 2021-04-11 22:26:46 · 436 阅读 · 1 评论 -
OpenCV15阈值操作
/*prepared by txwtech阈值操作只能是灰度图像图像阈值阈值类型阈值 是什么?简单点说是把图像分割的标尺,这个标尺是根据什么产生的,阈值产生算法?阈值类型。(Binary segmentation)阈值类型一阈值二值化(threshold binary)阈值类型一阈值反二值化(threshold binary Inverted)阈值类型一截断 (truncate)阈值类型一阈值取零 (threshold to zero)THRESH_TRIANGLE三角码取原创 2021-04-08 22:12:01 · 152 阅读 · 0 评论 -
OpenCV14图像上采样_图像放大和降采样_缩小与高斯不同
/*prepared by txwtech图像上采样和降采样图像金字塔概念1. 我们在图像处理中常常会调整图像大小,最常见的就是放大(zoom in)和缩小(zoom out),尽管几何变换也可以实现图像放大和缩小,但是这里我们介绍图像金字塔2. 一个图像金字塔式一系列的图像组成,最底下一张是图像尺寸最大,最上方的图像尺寸最小,从空间上从上向下看就想一个古代的金字塔。高斯金子塔 – 用来对图像进行降采样拉普拉斯金字塔 – 用来重建一张图片根据它的上层降采样图片什么是高斯不同(Differen原创 2021-04-07 22:16:10 · 505 阅读 · 0 评论 -
OpenCV13形态学操作应用-提取水平与垂直线_字符识别
/*by txwtech形态学操作应用-提取水平与垂直线_字符识别原理方法图像形态学操作时候,可以通过自定义的结构元素实现结构元素对输入图像一些对象敏感、另外一些对象不敏感,这样就会让敏感的对象改变而不敏感的对象保留输出。通过使用两个最基本的形态学操作 – 膨胀与腐蚀,使用不同的结构元素实现对输入图像的操作、得到想要的结果。- 膨胀,输出的像素值是结构元素覆盖下输入图像的最大像素值- 腐蚀,输出的像素值是结构元素覆盖下输入图像的最小像素值上述膨胀与腐蚀过程可以使用任意的结构元素.原创 2021-04-07 21:21:11 · 379 阅读 · 0 评论 -
OpenCV12开操作_闭操作_形态学梯度_顶帽_黑帽
/*by txwtech开操作- open先腐蚀后膨胀可以去掉小的对象,假设对象是前景色,背景是黑色闭操作- close先膨胀后腐蚀(bin2)可以填充小的洞(fill hole),假设对象是前景色,背景是黑色形态学梯度- Morphological Gradient膨胀减去腐蚀又称为基本梯度(其它还包括-内部梯度、方向梯度)顶帽 – top hat顶帽 是原图像与开操作之间的差值图像黑帽 – black hat黑帽是闭操作图像与源图像的差值图像API:morp原创 2021-04-06 20:45:30 · 334 阅读 · 0 评论 -
OpenCV11膨胀与腐蚀的操作
/*by:txwtech膨胀与腐蚀:作用:可以排除一些干扰,具体看图片处理效果形态学操作(morphology operators)-膨胀图像形态学操作 – 基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学形态学有四个基本操作:腐蚀、膨胀、开、闭膨胀与腐蚀是图像处理中最常用的形态学操作手段形态学操作-膨胀(用最大的替换中心像素)跟卷积操作类似,假设有图像A和结构元素B,结构元素B在A上面移动,其中B定义其中心为锚点,计算B覆盖下A的最大像素值用来替换锚点的像素,原创 2021-04-03 22:41:51 · 334 阅读 · 0 评论 -
OpenCV10中值模糊去噪点-双边模糊美化人像
/*模糊图像2-txwtech2021.4.1中值滤波双边滤波统计排序滤波器中值对椒盐噪声有很好的抑制作用.椒盐噪声就是图片的黑白噪点双边滤波均值模糊无法克服边缘像素信息丢失缺陷。原因是均值滤波是基于平均权重高斯模糊部分克服了该缺陷,但是无法完全避免,因为没有考虑像素值的不同高斯双边模糊 – 是边缘保留的滤波方法,避免了边缘信息丢失,保留了图像轮廓不变中值模糊medianBlur(Mat src, Mat dest, ksize)//去噪点双边模糊bilateralFilter原创 2021-04-01 22:23:55 · 511 阅读 · 0 评论 -
OpenCV09均值模糊(blur)高斯模糊(GaussianBlur)
/*模糊图像一Smooth/Blur 是图像处理中最简单和常用的操作之一使用该操作的原因之一就为了给图像预处理时候减低噪声使用Smooth/Blur操作其背后是数学的卷积计算通常这些卷积算子计算都是线性操作,所以又叫线性滤波假设有6x6的图像像素点矩阵。卷积过程:6x6上面是个3x3的窗口,从左向右,从上向下移动,黄色的每个像个像素点值之和取平均值赋给中心红色像素作为它卷积处理之后新的像素值。每次移动一个像素格。归一化盒子滤波(均值滤波)高斯滤波-正态分布曲线均值模糊-原创 2021-03-30 22:01:17 · 519 阅读 · 0 评论 -
OpenCV08绘制线、矩形、圆、椭圆等基本几何形状,添加文字
/*txwtech2021.3.28OpenCV08绘制形状与文字使用cv::Point与cv::Scalar绘制线、矩形、圆、椭圆等基本几何形状随机生成与绘制文本Point表示2D平面上一个点x,yPoint p;p.x = 10;p.y = 8;orp = Pont(10,8);Scalar表示四个元素的向量Scalar(a, b, c);// a = blue, b = green, c = red表示RGB三个通道绘制线、矩形、园、椭圆等基本几何形状画线 cv::l.原创 2021-03-29 23:10:06 · 400 阅读 · 0 评论 -
OpenCV07调整图像的亮度和对比度
/*txwtechOpenCV07调整图像的亮度和对比度图像变换可以看作如下:- 像素变换 – 点操作- 邻域操作 – 区域调整图像亮度和对比度属于像素变换-点操作g(i,j)=af(i,j)+b,其中a(alpha)>0,b(beta)是增益变量f(i,j)表示一个像素点a:对比度b:亮度,数值越大,亮度越高API:Mat new_image = Mat::zeros( image.size(), image.type() ); 创建一张跟原图像大小和类型一致的空白图像、.原创 2021-03-28 21:16:58 · 352 阅读 · 0 评论 -
2021.3.28OpenCV06图像混合操作addWeighted
/*txwtech2021.3.28OpenCV06图像混合操作addWeighted理论-线性混合操作相关API (addWeighted)理论-线性混合操作AddWeighted 计算两数组的加磅值的和void cvAddWeighted( const CvArr* src1, double alpha, const CvArr* src2, double beta, double gamma, CvArr* dst );src1 第一个原数组. a...原创 2021-03-28 17:20:18 · 296 阅读 · 0 评论 -
2021.3.27OpenCV05读写图像-像素-修改像素值-实现反色显示-反差图像
/*2021.3.27txwtech读写图像读写像素修改像素值imread 可以指定加载为灰度或者RGB图像Imwrite 保存图像文件,类型由扩展名决定读一个GRAY像素点的像素值(CV_8UC1)Scalar intensity = img.at<uchar>(y, x);或者 Scalar intensity = img.at<uchar>(Point(x, y));读一个RGB像素点的像素值Vec3f intensity = img.at<Vec原创 2021-03-27 23:22:48 · 380 阅读 · 0 评论 -
2021.3.27OpenCV04Mat对象的操作-图像复制克隆-转灰度空间-显示像素点的值-显示行列
2021.3.27OpenCV04Mat对象的操作-图像复制克隆-转灰度空间-显示像素点的值-显示行列-create方式创建mat对象lMat对象OpenCV2.0之后引进的图像数据结构、自动分配内存、不存在内存泄漏的问题,是面向对象的数据结构。分了两个部分,头部与数据部分lIplImage是从2001年OpenCV发布之后就一直存在,是C语言风格的数据结构,需要开发者自己分配与管理内存,对大的程序使用它容易导致内存泄漏问题Mat对象使用l部分复制:一般情况下只会复制Mat对象的头和.原创 2021-03-27 22:00:55 · 436 阅读 · 0 评论 -
2021.3.25OpenCV03矩阵的掩膜操作-函数调用filter2D功能
//#include出现语法错误,注意选择debug还是release,x86还是x64//03-矩阵的掩膜操作/*函数调用filter2D功能定义掩膜:Mat kernel = (Mat_<char>(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);filter2D( src, dst, src.depth(), kernel );其中src与dst是Mat类型变量、src.depth表示位图深度,有32、24、8等*///#incl原创 2021-03-25 23:05:20 · 358 阅读 · 1 评论 -
2021.3.25_OpenCV02图像加载,修改,保存操作
OpenCV02图像加载,修改,保存操作//图像加载,修改,保存操作#include <opencv2/core.hpp>#include <opencv2/highgui.hpp>#include <opencv2/opencv.hpp>using namespace cv;int main(int argc, char * argv[]){ //Mat src = imread("E:/pictures/wallpapers/a11.jpg",I原创 2021-03-25 21:38:44 · 303 阅读 · 0 评论 -
2020.6.21_P77_OpenCV投影变换-通过鼠标事件在原图和输出的画布上选取四组对应的坐标
//2020.6.21_P77_OpenCV投影变换//通过鼠标事件在原图和输出的画布上选取四组对应的坐标//投影矩阵的数据类型为CV_64F//txwtech//2020.6.21_P77_OpenCV投影变换//通过鼠标事件在原图和输出的画布上选取四组对应的坐标//投影矩阵的数据类型为CV_64F//txwtech#include <opencv2/core.hpp>#include <opencv2/imgproc.hpp>#include <op原创 2020-06-22 11:13:04 · 499 阅读 · 1 评论 -
2020.6.21P72_OpenCV_几何变换_图像平移_缩放_旋转
描述://2020.6.21P72_OpenCV_图像平移_缩放_旋转•完成一张图像的几何变换需要两个独立的算法。首先需要一个算法实现空间坐标变换,用它描述每个像素如何从初始位置移动到终止位置;其次,还需要一个插值算法完成输出图像的每个像素的灰度值。代码://2020.6.21P72_OpenCV_图像平移_缩放_旋转//#include <opencv2/core.hpp>//#include <opencv2/highgui.hpp>//txwtech#原创 2020-06-21 16:02:36 · 607 阅读 · 0 评论 -
2020.6.14P54OpenCV将RGB彩色图像转换为多通道Mat
2020.6.14P54将RGB彩色图像转换为多通道Mat//cvp52#include <opencv2/core.hpp>#include <opencv2/highgui.hpp>using namespace cv;#include <iostream>using namespace std;int main(int argc, char *argv[]){ //Mat img = imread(argv[1],CV_LOAD_IMAG原创 2020-06-14 16:13:31 · 1049 阅读 · 0 评论 -
2020.6.14_P52OpenCV读取并显示图像
2020.6.14_P52OpenCV读取并显示图像//cvp52#include <opencv2/core.hpp>#include <opencv2/highgui.hpp>using namespace cv;#include <iostream>using namespace std;int main(int argc, char *argv[]){ //Mat img = imread(argv[1],CV_LOAD_IMAGE_GRA原创 2020-06-14 16:01:33 · 400 阅读 · 0 评论 -
2020.6.14_OpenCV_p46_Mat的乘法_双通道矩阵相乘
//2020.6.14_OpenCV_p46_Mat的乘法_双通道矩阵相乘//两个Mat只能同时是float,或double类型//2020.6.14_OpenCV_p46_Mat的乘法_双通道矩阵相乘//两个Mat只能同时是float,或double类型#include <opencv2/core.hpp>using namespace cv;#include <iostream>using namespace std;int main(int argc,原创 2020-06-14 15:31:14 · 590 阅读 · 1 评论 -
2020.6.12_p38_OpenCV使用Rect类获取矩阵中某一特定的矩形区域
2020.6.12_p38_使用Rect类获取矩阵中某一特定的矩形区域//2020.6.12_p38_使用Rect类获取矩阵中某一特定的矩形区域#include <opencv2/core.hpp>using namespace cv;#include <iostream>using namespace std;int main(int argc, char *argv[]){ Mat matrix = (Mat_<int>(5, 5) <...原创 2020-06-12 14:33:56 · 523 阅读 · 2 评论 -
2020.6.12_p35_OpenCV使用成员函数rowRang或colRange得到矩阵的连续行或者连续列
//2020.6.12_p35_使用成员函数rowRang或colRange得到矩阵的连续行或者连续列//Range(int _start,int _end),这是一个左闭有开的序列[_start,_end), Range(2,5),产生的是2,3,4的序列。左包右不包括//复制克隆矩阵//2020.6.12_p35_使用成员函数rowRang或colRange得到矩阵的连续行或者连续列//Range(int _start,int _end),这是一个左闭有开的序列[_start,_end),原创 2020-06-12 09:36:09 · 603 阅读 · 0 评论 -
2020.6.11 opencv访问多通道Mat对象中的值p30
2020.6.11 opencv访问多通道Mat对象中的值//2020.6.11 opencv访问多通道Mat对象中的值#include <opencv2/core.hpp>using namespace cv;#include <iostream>using namespace std;//typedef Vec<float,3> Vec3f;//系统已经默认定义好了。int main(int argc, char *argv[]){ Mat mm原创 2020-06-12 09:00:10 · 547 阅读 · 0 评论 -
2020.6.10_opencv访问单通道Mat对象中的值
访问单通道Mat对象中的值//访问单通道Mat对象中的值#include <opencv2/core.hpp>using namespace cv;#include <iostream>using namespace std;int main(int argc, char *argv[]){ Mat m = (Mat_<int>(3, 2) << 11, 12, 33, 43, 51, 16); for (int r = 0; r...原创 2020-06-10 22:07:19 · 435 阅读 · 0 评论 -
OpenCV_Win10开发环境搭建vs2017
OpenCV_Win10开发环境搭建vs20171.下载安装包。最新安装包https://opencv.org/releases.html#网盘版本供参考:https://pan.baidu.com/s/1XzBSkWdaT69k7jWy1-LNgg2.解压安装包3.配置环境变量右键此电脑,选择属性。按照编号顺序点开点击编辑文本,把光标移...原创 2020-03-23 13:19:09 · 663 阅读 · 0 评论
分享