- 博客(33)
- 资源 (3)
- 收藏
- 关注
原创 骨架细化算法实现
原理:实现:void thinImage(Mat& src, Mat& dst, const int maxIterations = -1){ dst = src.clone(); Mat mid = src.clone();; int count = 0; //记录迭代次数 while (true) { count++; if (maxIterations != -1 && count > maxIterations) //限制次数并且迭
2021-06-15 17:17:44 1065 1
原创 连通域标记算法实现
原理:1.从左到右,从上到下遍历每一个像素点,然后判断该像素的值是否在集合V中(这里是一张二值图,我们假设黑色的值为0)。2.如果遇到一个值为0的点,说明在该点附近可能存在与该点相连通的像素点,即可能存在连通域。那么我们就暂时停止之前的遍历,开始以该点为种子点,查找该点附近的邻域中是否存在与其连通的像素点,若与该点连通,则将其存到一个堆栈中,并将该点的标签赋值为与种子点相同的标签,并对访问过的像素点置一个表示已访问的标志,以避免后面对其重复访问。3.接下来就从堆栈中取出点,查看该点的四邻域,依次把和该
2021-06-15 15:54:12 1742 4
原创 区域生长算法实现
原理:实现:void regiongrow(Mat& src, Mat& dst, cv::Point pt, int threshold){ Point ptGrowing; //待生长点位置 int srcval = src.at<uchar>(pt.y, pt.x); //起始生长点灰度值 dst = Mat::zeros(src.size(), CV_8UC1); //创建一个空白区域,填充为黑色 in
2021-06-14 22:30:24 476
原创 HoughLines霍夫变换实现
原理:实现:void hough(Mat& edge, vector<Vec2f>& lines, int threshold){ Mat H = Mat::zeros(2 * edge.rows + 2 * edge.cols, 180, CV_16S); float theta, rho; for (int i = 0; i < edge.rows; i++) { for (int j = 0; j < edge.cols; j++)
2021-06-14 20:20:25 228
原创 equalizeHist直方图均衡化实现
原理:直方图均衡化算法原理与实现实现:void equalizehist(Mat &src, Mat &dst){ dst.create(src.size(), src.type()); // 计算直方图 int histogram[256] = { 0 }; int totalnum = src.rows*src.cols; uchar *data = src.data; for (int i = 0; i < totalnum; ++i) { ++his
2021-06-14 20:04:13 522
原创 DOG算子实现
原理:实现:void dog(Mat& src, Mat& dst, Size size, double sigma, double k = 1.6){ Mat gaussian_dst1, gaussian_dst2; GaussianBlur(src, gaussian_dst1, size, k*sigma); GaussianBlur(src, gaussian_dst2, size, sigma); dst = gaussian_dst1 - gaussian_ds
2021-06-13 14:26:59 366
原创 LOG算子实现
原理:实现:void log(Mat& src, Mat& dst){ Mat kernel = (Mat_<float>(5, 5) << 0, 0 ,-1, 0, 0, 0, -1, -2, -1, 0, -1, -2, 16, -2, -1, 0, -1, -2, -1, 0, 0, 0, -1, 0, 0); filter2D(src, dst, src.depth(), kernel);}
2021-06-13 14:25:43 843
原创 canny算子实现
原理:实现://阶乘int factorial(int n){ int fac = 1; if (n == 0) return fac; for (int i = 1; i <= n; ++i) fac *= i; return fac;}//获得Sobel平滑算子Mat getSobelSmooth(int size){ int n = size - 1; Mat SobelSmoothoper = Mat::zeros(size, 1, CV_32F); fo
2021-06-13 14:19:16 299
原创 sobel算子实现
原理:实现://阶乘int factorial(int n) { int fac = 1; if (n == 0) return fac; for (int i = 1; i <= n; ++i) fac *= i; return fac;}//获得Sobel平滑算子Mat getSobelSmooth(int size) { int n = size - 1; Mat SobelSmoothoper = Mat::zeros(size, 1, CV_32F); fo
2021-06-13 14:10:35 601
原创 prewitt算子实现
原理:实现:void prewitt(Mat& src, Mat& dst) { //获取Prewitt算子 Mat getPrewitt_horizontal = (Mat_<float>(3, 3) << -1, -1, -1, 0, 0, 0, 1, 1, 1); //水平方向 Mat getPrewitt_vertical = (Mat_<float>(3, 3) << -1, 0, 1, -1, 0, 1, -1, 0,
2021-06-13 14:08:08 1115
原创 roberts算子实现
原理:实现:void roberts(Mat& src, Mat& dst) { Mat oper1 = (Mat_<float>(2, 2) << 0, 1, -1, 0); //45°方向 Mat oper2 = (Mat_<float>(2, 2) << 1, 0, -1, 0); //135°方向 flip(oper1, oper1, -1); flip(oper2, oper2, -1); Mat dst1, ds
2021-06-13 14:05:01 458
原创 blackhat黑帽实现
原理:实现:void blackhat(Mat& src, Mat& dst, Size size){ Mat element = getStructuringElement(MORPH_RECT, Size(3, 3)); morphologyEx(src, dst, MORPH_CLOSE, element); dst = dst - src;}
2021-06-13 11:58:42 208
原创 tophat顶帽运算实现
原理:实现:void tophat(Mat& src, Mat& dst, Size size){ Mat element = getStructuringElement(MORPH_RECT, Size(3, 3)); morphologyEx(src, dst, MORPH_OPEN, element); dst = src - dst;}
2021-06-13 11:58:34 640
原创 gradient形态学梯度实现
原理:实现:void gradient(Mat& src, Mat& dst, Size size){ Mat element = getStructuringElement(MORPH_RECT, size), dst1, dst2; dilate(src, dst1, element); erode(src, dst2, element); dst = dst1 - dst2;}
2021-06-12 20:34:44 180
原创 close闭运算实现
原理:实现:void close(Mat& src, Mat& dst, Size size){ Mat element = getStructuringElement(MORPH_RECT, size); dilate(src, dst, element); erode(dst, dst, element);}
2021-06-12 17:24:00 404
原创 open开运算实现
原理:实现:void open(Mat& src, Mat& dst, Size size){ Mat element = getStructuringElement(MORPH_RECT, size); erode(src, dst, element); dilate(dst, dst, element);}
2021-06-12 17:22:55 218
原创 erode腐蚀实现
原理:实现:void Erode(Mat& src, Mat& dst, Size size){ dst = Mat::zeros(src.size(), src.type()); Mat mid; int h = (size.height - 1) / 2, w = (size.width - 1) / 2; copyMakeBorder(src, mid, h, h, w, w, BORDER_DEFAULT); for (int i = h; i < src.r
2021-06-12 14:12:11 312
原创 dilate膨胀实现
原理:实现:void Dilate(Mat& src, Mat& dst, Size size){ dst = Mat::zeros(src.size(), src.type()); Mat mid; int h = (size.height - 1) / 2, w = (size.width - 1) / 2; copyMakeBorder(src, mid, h, h, w, w, BORDER_DEFAULT); for (int i = h; i < src.r
2021-06-12 14:09:36 351
原创 adaptiveThreshold自适应阈值实现
enum adaptiveMethod { meanFilter, gaaussianFilter, medianFilter };void adaptivethreshold(cv::Mat& src, cv::Mat& dst, int size, double c, adaptiveMethod method = meanFilter) { Mat smooth; switch (method) { case meanFilter: blur(src, smoot.
2021-06-11 23:11:17 267
原创 最大熵阈值分割实现
原理:实现:int maxentropy(Mat& src, Mat& dst){ int thresh = 0; int histogram[256] = { 0 }; for (int i = 0; i < src.rows; ++i) { const uchar* ptr = src.ptr<uchar>(i); for (int j = 0; j < src.cols; ++j) { if (ptr[j] == 0) cont
2021-06-11 19:34:14 235
原创 直方图双峰法实现
原理:实现:int histogram(Mat& src, Mat& dst){ double minv, maxv; Point pt_min, pt_max; minMaxLoc(src, &minv, &maxv, &pt_min, &pt_max); double T = (minv + maxv) / 2; double thresh = 0; double histogram[256] = { 0 }; //灰度直方图,下标
2021-06-11 16:55:03 2217
原创 OTSU最大类间方差法实现
原理:实现:int otsu(Mat& src, Mat& dst){ int thresh = 0; int histogram[256] = { 0 }; for (int i = 0; i < src.rows; ++i) { const uchar* ptr = src.ptr<uchar>(i); for (int j = 0; j < src.cols; ++j) { ++histogram[ptr[j]]
2021-06-11 14:48:03 151 1
原创 bilateralFilter双边滤波实现
原理:实现:Mat getcolor(int size, double sigmacolor){ Mat colormat = Mat::zeros(256, 1, CV_64F); for (int i = 0; i < 256; ++i) { colormat.at<double>(i, 0) = exp((-i*i) / (2.0 * pow(sigmacolor, 2))); } return colormat;}Mat getspace(int siz
2021-06-10 16:56:43 165
原创 medianBlur中值滤波实现
原理:实现:int getmedian(Mat& kernel){ vector<int> v; for (int i = 0; i < kernel.rows; ++i) { for (int j = 0; j < kernel.cols; ++j) { v.push_back(kernel.at<int>(i, j)); } } sort(v.begin(), v.end()); return v[v.size() / 2]
2021-06-09 22:19:42 367
原创 GaussianBlur高斯滤波实现
原理高斯滤波和均值滤波一样,都是利用一个掩膜和图像进行卷积求解。不同之处在于:均值滤波器的模板系数都是相同的为1,而高斯滤波器的模板系数,则随着距离模板中心的增大而系数减小(服从二维高斯分布)。所以,高斯滤波器相比于均值滤波器对图像个模糊程度较小,更能够保持图像的整体细节。实现:void gaussianfilter(Mat& src, Mat& dst, Size size, double sigmaX, double sigmaY){ Mat kernel = Mat::z
2021-06-09 20:09:48 598
原创 boxFilter方框滤波实现
原理:实现:使用积分图实现void sumRegion(Mat& img, Mat& sum){ for (size_t i = 1; i < sum.rows; i++) { for (size_t j = 1; j < sum.cols; j++) { sum.at<double>(i, j) = sum.at<double>(i - 1, j) + sum.at<double>(i, j - 1) - sum.a
2021-06-08 22:17:12 805
原创 RANSAC算法拟合平面实现
原理:---------------基于ransac算法平面检测:1、确定迭代次数;2、在迭代次数内:2.1 随机选择三个点组成平面(判断三个点是否共线);2.2 构造坐标矩阵;2.3 求平面方程;2.4 求所有点到平面的距离;2.5 统计inlier个数(距离小于阈值);3、迭代选择inlier个数最多的平面。已知三个点坐标为P1(x1,y1,z1), P2(x2,y2,z2), P3(x3,y3,z3),求过他们的平面方程:设方程为A(x - x1) + B(y - y1) + C(
2021-06-06 21:04:05 2183 5
原创 最小二乘法拟合平面实现
原理:实现:void FitPlaneByLeastSquares(pcl::PointCloud<pcl::PointXYZ>::Ptr& cloud){ if (cloud->points.size() < 3) return; double meanX = 0, meanY = 0, meanZ = 0; double meanXX = 0, meanYY = 0, meanZZ = 0; double meanXY = 0, meanXZ = 0,
2021-06-06 20:57:26 1567 2
原创 ProjectInliers投影滤波实现
实现:以平面模型投影为例void projection(pcl::PointCloud<pcl::PointXYZ>::Ptr& cloud, pcl::PointCloud<pcl::PointXYZ>::Ptr& cloud_projected, pcl::ModelCoefficients::Ptr coefficients){ float a = coefficients->values[0], b = coefficients->value
2021-06-05 21:35:09 301
原创 RadiusOutlierRemoval半径滤波实现
原理:对整个输入迭代一次,对于每个点进行半径R邻域搜索,如果邻域点的个数低于某一阈值,则该点将被视为噪声点并被移除。实现:void radiusremoval(pcl::PointCloud<pcl::PointXYZ>::Ptr& cloud, pcl::PointCloud<pcl::PointXYZ>::Ptr& cloud_filtered, double radius, int min_pts){ pcl::KdTreeFLANN<pcl::
2021-06-05 21:32:21 618 1
原创 StatisticalRemoval统计滤波实现
原理:对每一点的邻域进行统计分析,基于点到所有邻近点的距离分布特征,过滤掉一些不满足要求的离群点。该算法对整个输入进行两次迭代:在第一次迭代中,它将计算每个点到最近k个近邻点的平均距离,得到的结果符合高斯分布。接下来,计算所有这些距离的平均值 μ 和标准差 σ 以确定距离阈值 thresh_d ,且 thresh_d = μ + k·σ。 k为标准差乘数。在下一次迭代中,如果这些点的平均邻域距离分别低于或高于该阈值,则这些点将被分类为内点或离群点。实现:float distavg(vector<
2021-06-05 21:30:12 955 2
原创 VoxelGrid体素滤波实现
原理实现void voxelgrid(pcl::PointCloud<pcl::PointXYZ>::Ptr& cloud, pcl::PointCloud<pcl::PointXYZ>::Ptr& cloud_filtered, float leafsize){ pcl::PointXYZ minPt, maxPt; pcl::getMinMax3D(*cloud, minPt, maxPt); float lx = maxPt.x - minPt.
2021-06-05 21:26:59 2069 9
原创 PassThrough直通滤波实现
原理:对指定的某一维度进行滤波,去掉用户指定字段范围内(或外)的点。void passthrough(pcl::PointCloud<pcl::PointXYZ>::Ptr& cloud, pcl::PointCloud<pcl::PointXYZ>::Ptr& cloud_filtered, std::string field_name, float limit_min, float limit_max, bool limit_negative = false)
2021-06-05 21:18:00 340
两百行C++代码实现yolov5车辆计数部署
2024-06-10
pyqt界面 计算树木las点云的树高、胸径、地径和冠幅面积
2024-06-01
点云裁剪界面qt+pcl+vtk
2024-05-27
自动驾驶环境感知网课视频
2023-11-11
ICP算法的几种不同实现
2023-11-05
yolov5+SORT多目标跟踪
2023-08-24
机械臀位姿估计与抓取网课视频
2023-08-17
三维点云网课视频(七套)
2023-08-17
yolov5目标检测多线程Qt界面
2023-08-12
yolov5目标检测多线程C++部署
2023-08-12
《从零搭建一套结构光3D重建系统》网课视频
2023-08-06
《机械臂抓取从入门到实战》课程视频及配套资料
2023-08-06
Qt+PCL+VTK开发的点云标注工具
2023-07-05
《图像分割实战》课程视频教程
2023-06-30
yolov8量化部署(基于openvino和tensorrt)
2023-06-11
texture mapping纹理贴图
2023-05-06
Qt开发的labelimg-yolo
2023-03-27
yolov5-v7.0网络分类、检测和分割OpenCV C++部署demo
2023-03-24
pointnet-qt
2022-12-04
VS2019+CUDA11.1 Release x64编译的OpenCV4.5.5(带CUDA和contrib模块)
2022-11-26
ICP算法加速优化-多线程和GPU
2022-11-25
opencv+qt人脸检测demo
2022-11-20
《Linux/UNIX网络编程》-甘刚.rar
2021-05-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人