图像处理相关算法
文章平均质量分 64
总结常用的图像处理算法,偏向于传统图像处理,参考冈萨雷斯第四版、C++版Opencv、python版Opencv
明月醉窗台
路漫漫其修远兮,吾将上下而求索
接视觉算法类各种商务合作,算法实现,具体可联系w:1301863091
展开
-
C++内存管理之拷贝memcpy、分配malloc 与释放free
C++内存管理之拷贝memcpy、分配malloc 与释放free原创 2023-04-27 11:29:54 · 4880 阅读 · 0 评论 -
工业相机+镜头选型及靶面、焦距计算等相关详解
工业相机+镜头选型及靶面、焦距计算等相关详解原创 2024-01-22 22:50:05 · 1387 阅读 · 0 评论 -
工业相机相关概念词介绍:ISP算法、线阵相机、常用术语
工业相机相关概念词介绍:ISP算法、线阵相机、常用术语原创 2024-01-12 19:02:54 · 1647 阅读 · 0 评论 -
C++ - opencv应用实例之矩形框检测
C++ - opencv应用实例之矩形框检测原创 2023-01-02 20:30:36 · 3462 阅读 · 2 评论 -
相机成像原理计算公式推理:标定、内外参矩阵优化、三维点重建
相机标定原理推理原创 2022-08-17 19:52:15 · 405 阅读 · 0 评论 -
Opencv相机标定角点提取算法之角点排序
一个关于角点提取及排序的小尝试,C++ opencv原创 2022-08-09 16:23:09 · 1943 阅读 · 2 评论 -
Python学习笔记十一之一个简单的opencv阈值分割实例,求取圆度、轮廓椭圆拟合
一个opencv-python的小例子原创 2022-08-09 08:59:31 · 1157 阅读 · 0 评论 -
Python学习笔记十之Opencv图像处理:阈值、滤波、形态学、梯度、轮廓提取、FFT
python-opencv基本的图像处理算法运用原创 2022-08-08 14:39:33 · 688 阅读 · 0 评论 -
Python学习笔记九之Opencv图像基本操作
python-opencv-图像基本操作原创 2022-08-08 12:23:22 · 180 阅读 · 0 评论 -
C++ - Opencv应用实例之相位相关法实现图像拼接
原本是模仿一张大图进行任意方向移动后得到结果图,求他的逆过程来判断大图运动方向,但不是通过整个大图来判别,而是在运动时,大图被扫描分割成若干子图,通过将子图进行拼接后,判断拼接后的L形图像之间的偏移量来进行运动方向判定。将待拼接的两幅图像进行傅里叶傅里叶变换,然后两者相乘求取互功率谱,再进行傅里叶反变换后得到对应时域的狄拉克雷函数,一个关于x,y的二元一次函数,其极大值对应的x,y值即为偏移量。**涉及算法**图像缩放、比例裁剪、傅里叶变换、相位相关法、图像拷贝。**对比算法**模板匹配算法。...原创 2022-07-17 22:18:53 · 1854 阅读 · 0 评论 -
Opencv鼠标事件+界面交互之绘制矩形多边形选取感兴趣区域ROI
1.Opencv鼠标事件回调函数使用:响应函数使用:2.绘制矩形ROI2.1方法一2.2方法二3.绘制多边形ROI参考:1.使用鼠标在图像上绘制矩形框或者多边形框2.OpenCV-Python选择ROI(矩形和多边形)原创 2022-06-25 08:44:05 · 2288 阅读 · 0 评论 -
Opencv相机标定之圆形标识点中心检测
多个角度扫描同一个物体时,通常会在物体上或者其他固定支架上粘贴圆形标志点来辅助进行拼接,通过计算两个角度下的标志点三维坐标,建立对应点关系,利用SVD求解旋转平移矩阵。在三维重建之前,需要在二维图像上提取标志点中心坐标,本文讲解一种利用梯度提取粗轮廓,然后进行亚像素获取,连接轮廓,椭圆拟合得到中心点的方法。本文所述亚像素轮廓提取方法来自于参考文献[1],关于论文的详解其他博文中也有讲述,本文着重是利用该方法实现全流程的标志点中心提取。使用黑色背景白色前景的圆形标志点如图1所示,在图像上会表现出强烈的对比反差转载 2022-06-11 09:01:25 · 4750 阅读 · 2 评论 -
Opencv例程之双目相机标定
双目视觉标定程序讲解 #include "opencv2/calib3d/calib3d.hpp"#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include <vecto...原创 2022-05-26 09:24:18 · 1068 阅读 · 2 评论 -
运动目标检测之关键帧提取、二帧差法及三帧差法
运动目标检测之帧差法基于Opencv实现运动目标检测,主要实现方式有1.视频读取后进行背景建模(高斯建模等),对每一帧与背景相减后得到目标,然后采用二值、形态学处理后提取轮廓,轮廓的外界矩形即标出的矩形框2.帧差法:对 相邻帧进行做差,然后对其进行二值及膨胀运算,此算法对阈值分割的阈值要求较高,要想实现好的效果需要多次测试调出一个较好阈值背景建模一般Opencv都集成好了现成的API,直接调用调参一般就可提取一个较好的背景,该算法的运动目标检测适用于摄像机不变条件下拍摄出的视频,即背景区域不原创 2022-05-23 12:28:05 · 4163 阅读 · 0 评论 -
霍夫圆检测提取感兴趣区域+轮廓检测分类及特征提取
Opencv轮廓提取相关算法一直想整理一下关于轮廓提取相关的内容,刚好最近用到了这块知识,所以就记录一下针对某一整幅图像,如下图一整幅图像,想要提取其中的一些轮廓及特征点,使其最终呈现第二幅图的效果,此时对整幅图像进行分割提取是不明智的,需要先从中提取感兴趣区域,然后对ROI中的图形进行分割检测并特征提取。涉及算法:霍夫圆检测、阈值分割、形态学处理、轮廓检测+排序、形状筛选1.霍夫圆检测原理参考:HoughCircles 霍夫圆变换原理及圆检测笛卡尔坐标系与极坐标系中的 圆原创 2022-05-21 09:48:30 · 499 阅读 · 0 评论 -
轮廓拟合之圆拟合与椭圆拟合
轮廓拟合记录最近的研究内容:针对如下的刨面图,分别对内圆和外圆进行拟合,然后得出其面积比,这是最终需求涉及算法:阈值分割、轮廓提取、K均值聚类、圆+椭圆拟合、凸包检测1.外圆拟合外圆即根据最外侧的大轮廓拟合出的圆心,算法实现为:灰度化->大津阈值分割->轮廓提取->最小外接圆(最小面积)->得到圆参数代码如下:struct Circle_ {//若为圆,赋值半径 Point2f center; float radius; float area;};原创 2022-05-17 08:46:25 · 1147 阅读 · 0 评论 -
Opencv立体视觉相关API及原理介绍
1.initUndistortRectifyMap()void cv::initUndistortRectifyMap(InputArray cameraMatrix,InputArray distCoeffs,InputArray R,InputArray newCameraMatrix,Size size,int m1type,OutputArray map1,OutputArray map2 ) Python:cv.initUndistortRectifyMap(原创 2022-05-11 15:33:34 · 1715 阅读 · 0 评论 -
Opencv之---棋盘格角点检测算法源码解析
接着上一篇基于生长的棋盘格角点检测方法–(2)代码详解(上),来看一下第二个重要函数chessboardsFromCorners。 该函数的目的是用上一步骤中找到的角点恢复出棋盘结构。首先初始化一个3x3的角点矩阵,也就是一个 2x2的棋盘格,这是组成一个棋盘的最小单位了。然后利用...转载 2022-04-30 18:55:35 · 5200 阅读 · 0 评论 -
Opencv+Qt之基于阈值、形态学处理的种子分割自动分类系统
基于阈值分割的种子自动分类系统该系统首先实现对种子的自动分割,然后计算种子的边长及缺陷长度,然后进行自动分类,主要为解决以下问题主要涉及算法:自适应二值化、形态学处理、轮廓提取、凸包查找、寻找外接矩形以及矩阵位运算,生成随机颜色和绘制图像作为辅助。整体效果简介:算法实现如下:1.基于阈值分割获取连通域图像缩放->灰度化->大津阈值->轮廓查找+面积筛选->闭运算void Segment::get_segmask(const Mat src, Mat&am原创 2022-04-30 11:11:23 · 2534 阅读 · 0 评论 -
三维重建(4)之SVD求解三维变换矩阵Rt(旋转+平移)
SVD求解三维点集之间的变换矩阵针对三维重建中的多点空间变换关系,通过最小二乘+SVD分解方法求解变换矩阵,即旋转+平移,旋转可能是绕x、y、z旋转不同角度的结果,常被应用于机械臂控制、三维重建、场景建模等方面。参考-- 视觉SLAM十四讲:1.假设有一组配对好的3D点:这个问题可以用迭代最近点(Iterative Closest Point,ICP)求解,主要有两种方式:SVD、非线性优化的方式2.SVD方法建模:2.1 首先,定义第 i 对匹配点的误差项:2.2 将重点定为旋转矩原创 2022-04-29 14:50:11 · 7995 阅读 · 3 评论 -
三维重建(3)之双目立体相机之 任意一组坐标点的极线校正
1.立体相机三位重建一般步骤:基于图像的三维点云重建:相机标定->立体(极线)校正->特征匹配->获取匹配点对->生成点云->点云拟合基于深度相机(RGB-D)的三维重建:相机标定->RGB与深度图标定->目标分割->点云重建2.立体校正作为三维重建过程中不可或缺的一步,目前Opencv仅支持实现图像的立体校正,而多数在目标检测情况下需要实现点到点的映射关系,所以尝试借助Opencv的remap实现了任意一组点的极线校正Opencv极线原创 2022-04-27 09:59:12 · 2254 阅读 · 0 评论 -
二值化+连通域+提取轮廓小记
rgb、hsv颜色空间,图像中绘制带背景色的矩形框、二值图像处理及轮廓特征分析原创 2022-04-26 16:30:07 · 799 阅读 · 0 评论 -
SIFT、SURF、ORB等特征检测Opencv API简介
1、SIFTcv::xfeatures2d::SIFT::create( int nfeatures = 0, int nOctaveLayers = 3, double constrastThreshold = 0.04, double edgeThreshold = 10, double sigma = 1.5 )(1)nfeatures,保留的最佳特性的数量。特征按其得分进行排序(以SIFT算法作为局部对比度进行测量);(2)nOctavelLayers,高斯金字塔最小层级数,原创 2022-04-24 12:10:11 · 2844 阅读 · 0 评论 -
opencv之伪彩色处理
伪彩色处理伪彩色(pseudo-color)合成是按特定的数学关系把单波段灰度图像的灰度级变成彩色,然后进行彩色显示的方法,其目的是通过数据的彩色表达来增强区分目标的能力。在图像分割之后,需要对目标进行上色,多数情况下需应用伪彩色处理:即对原图灰度级进行一个新的彩色灰度级映射,是的目标特征得以保留,视觉更加明显,效果更加震撼。1.color_map函数伪彩色示例:opencv中的伪彩色应用函数:C++ 版using namespace cv;Mat im_gray=imread(im);原创 2022-03-23 10:30:12 · 4958 阅读 · 0 评论 -
opencv经典算子原理总结+SIFT算法原理+特征匹配用于图像拼接
此文总结一下opencv中的一些常见算子,如SIFT、Canny、及霍夫变换等原理,可用于深度理解特征提取数学原理1.SIFT(尺度不变性特征转换)SIFT算法的实质是在不同的尺度空间上查找关键点(特征点),并计算出关键点的方向。SIFT所查找到的关键点是一些十分突出,不会因光照,仿射变换和噪音等因素而变化的点,如角点、边缘点、暗区的亮点及亮区的暗点等。具体详见:SIFT特征点提取:https://blog.csdn.net/lingyunxianhe/article/details/790635原创 2022-02-18 21:52:50 · 2303 阅读 · 0 评论 -
图像变换之旋转、仿射变换、透视变换及Opencv接口介绍
1.图像平移、翻转与旋转原理总结一下相关原理对于实际应用,opencv提供了相应的接口函数,也可遍历图像坐标进行相应变换2.仿射变换原理实现:常用矩阵:3.透视变换透视变换又名投影变换,其可将三维坐标投影到二维坐标系,也可同样应用在二位坐标系。矩阵可分解为:参考:1.仿射变换原理及opencv接口应用2.透视变换应用 实例...原创 2022-02-10 17:22:20 · 2444 阅读 · 0 评论 -
傅里叶变换用于特征匹配+相似性度量应用总结
最近经交流被问到傅里叶变换用于特征匹配的具体原理、及在解决分类问题时,为何欧式距离可以用于n-1维向量空间的相似性度量,奈何一时无语凝噎,难以用简洁通俗的语言来解释,故在此总结留念:1.FFT用于特征匹配(即相位相关法)图像配准的基本问题是找出一种图像转换方法,用以纠正图像的形变。造成图像形变的原因多种多样,例如对于遥感图像而言,传感器噪声、由传感器视点变化或平台不稳定造成的透视变化、被拍摄物体的移动、变形或生长等变化、闪电和大气变化,以及阴影和云层遮盖都使图像产生不同形式的形变。正是图像形变原因和形式原创 2022-02-08 20:36:07 · 5414 阅读 · 0 评论 -
目标分割算法之连通域分析
1.连通域提取二值化后的图像为8位图CV_8UC1,首先对连通域进行标记,然后针对32位CV_32S图像进行连通域提取具体如下://标记连通域 img_bw == 二值图像Mat mask;connectedComponents(img_bw, mask, 8);//mask位32位图,连通域标签为其索引值map<int, vector<Point>> map_connect;for (int i = 0; i < mask.rows; i++){ for原创 2022-01-27 17:06:10 · 6409 阅读 · 0 评论 -
形态学处理用于目标分割:腐蚀、膨胀、开/闭运算、顶帽等
1.膨胀膨胀运算将目标物体边界处的背景点整合到该目标区域中,使物体边界向外部扩张。膨胀运算的表达式为opencv函数使用:Mat out;//第一个参数MORPH_RECT表示矩形的卷积核,当然还可以选择椭圆形的、交叉型的//MORPH_ELLIPSE MORPH_CROSSMat element = getStructuringElement(MORPH_RECT, Size(15, 15)); //膨胀操作dilate(img, out, element);namedWindow(原创 2022-01-22 09:53:20 · 3450 阅读 · 0 评论 -
目标分割算法之分水岭算法
1.分水岭实现原理分水岭算法常用于目标分割研究,其将图像以灰度为参考可视化为一种拓扑地貌,灰度大小等价于海拔高低,如果向地貌中的山谷进行漫水,一定程度时山丘将被分开成独立个体1.1基于降雨法实现分水岭如上图所示,假设雨水从而给高出降落,最终在山谷聚集,不同的山谷被赋予不同颜色,然而,在不同颜色出现汇聚的地方,混合颜色的位置就可以修建大坝,将目标分割开1.2基于灌水法实现分水岭如上图所示平面图,从各个山谷挖个洞向上灌水(灌水位置对应局部极小值,伴随水位上升,不同山谷的水相遇时,就可以修建大坝2原创 2022-01-17 19:03:19 · 4177 阅读 · 0 评论 -
多边形近似轮廓-多边形简化
1.原理多边形近似将物体的轮廓转为一系列的直线段,在此使用基于弦算法得到近似轮廓的多边形。就复杂度和所用内存空间而言,该算法不是最有效的,但具有易于实现和提供精确的逼近阈值控制的优点。弦算法通过迭代细分过程减少多边形轮廓的点数。分段[AB]表示A是起点,B是离A距离最远的弦,在A和B之间的轮廓上,寻找离弦最远的点M。如果M与弦之间的欧氏距离小于近似阈值,则停止对端[AB]的迭代过程,否则继续对段[AM]和[MB]的迭代过程。备注来两个公式:2.算法实现多边形近似算法原理源自Douglas-Peu原创 2021-11-23 19:55:30 · 5330 阅读 · 0 评论 -
直方图与伽马变换之二
图像增强1.直方图统计与绘制//直方图统计vector<int> cal_hist(const Mat&src){ vector<int>histogram(256, 0); //计算直方图 int pixelCount = src.cols*src.rows; uchar *imageData = src.data; for (int i = 0; i < pixelCount; ++i) { int gray = imageData[i];原创 2021-11-15 18:05:49 · 3103 阅读 · 0 评论 -
直方图与伽马变换之一
图像增强:直方图均衡化、伽马变换、自适应伽马变换原理及实现原创 2021-11-03 20:00:21 · 279 阅读 · 0 评论 -
霍夫变换--直线检测
霍夫变换最近苦研直线检测,感觉霍夫变换也还可以,哈哈,然后再摘抄谢别人整理好的作品备用,自家有粮,啥也不慌。1.直线检测通用算法:原图->灰度->滤波->二值->边缘检测->霍夫直线检测->对直线的一些操作里边边缘检测有个好的结果依赖于前期对图像的预处理,也可以再添加一些形态学处理,后边直线检测函数调参比较重要,需要根据具体应用场景挑一个普适参数,over下边是个example:#include <iostream>#include <原创 2021-10-21 19:45:03 · 1084 阅读 · 0 评论 -
拟合算法之一 直线拟合
直线拟合很早就想学习拟合了,经常听同事用到拟合,当时尚且一窍不通,必须快递加急紧追此处才是,也参考了网上大佬的一些宝贵经验,先将拟合方法总结如下:最小二乘法1.原理2.举例实现void fitline3(){ float b = 0.0f, k=0.0f; vector<Point>points; points.push_back(Point(27, 39)); points.push_back(Point(8, 5)); points.push_back(Point(8,原创 2021-10-12 19:52:31 · 3421 阅读 · 0 评论 -
几何矩求解椭圆
勒让德惯性椭圆求解1.matlab利用二阶矩求解椭圆长轴、短轴、离心率、长轴与x轴夹角xbar=stats(k).Centroid(1);%区域的重心坐标ybar = stats(k).Centroid(2); x = list(:,1) - xbar; y = -(list(:,2) - ybar); % This is negative for the % orientation calculation (measured in the % counter-clockwise dire原创 2021-09-26 19:57:25 · 1138 阅读 · 2 评论 -
opencv--文字标注putText字体应用
由于 每次进行图像标注时都需要去查哪个字体好用,故在此将所有的字体应用实例列出来,方便后期使用。1.putText函数原型void cv::putText( cv::Mat& img, // 待绘制的图像 const string& text, // 待绘制的文字 cv::Point origin, // 文本框的左下角 int fontFace, // 字体 (如cv::FONT_HERSHEY_PLAIN) double fontScale, // 尺寸因子,值越原创 2021-09-13 16:17:30 · 2035 阅读 · 0 评论 -
目标分割算法之基于区域增长
区域生长算法1.理论基础区域生长算法的基本思想是将有相似性质的像素点合并到一起。对每一个区域要先指定一个种子点作为生长的起点,然后将种子点周围领域的像素点和种子点进行对比,将具有相似性质的点合并起来继续向外生长,直到没有满足条件的像素被包括进来为止。这样一个区域的生长就完成了。这个过程中有几个关键的问题:a> 给定种子点(种子点如何选取?)种子点的选取很多时候采用人工交互的方法实现,也有用其他方式的,比如寻找物体并提取物体内部点作为种子点b> 确定在生长过程中能将相邻像素包括进来的准原创 2021-08-26 11:33:12 · 577 阅读 · 0 评论 -
目标分割算法之基于阈值处理
基于阈值的分割算法总结一下基于阈值的图像分割的几种算法,如下:1. 双峰法阈值分割Prewitt 等人于六十年代中期提出的直方图双峰法(也称 mode 法) 是典型的全局单阈值分割方法。该方法的基本思想是:假设图像中有明显的目标和背景,则其灰度直方图呈双峰分布,当灰度级直方图具有双峰特性时,选取两峰之间的谷对应的灰度级作为阈值。如果背景的灰度值在整个图像中可以合理地看作为恒定,而且所有物体与背景都具有几乎相同的对比度,那么,选择一个正确的、固定的全局阈值会有较好的效果。2.迭代阈值分割算法原理如下原创 2021-08-25 19:21:02 · 2164 阅读 · 0 评论 -
opencv-core组件二之傅里叶变换
离散傅里叶变换#include "opencv2/core.hpp"#include "opencv2/imgproc.hpp"#include "opencv2/imgcodecs.hpp"#include "opencv2/highgui.hpp"#include <iostream>using namespace cv;using namespace std;static void help(char ** argv){ cout << end原创 2021-08-23 20:14:27 · 136 阅读 · 0 评论