自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 图像处理之形态学操作

形态学操作将neo.png大津二值化之后,进行两次形态学膨胀,腐蚀,开,闭操作处理。在形态学处理的过程中,二值化图像中白色(255)的部分向4−4-4−近邻(上下左右)膨胀或收缩一格 。反复进行膨胀和收缩操作,可以消除独立存在的白色像素点;或者连接白色像素点。此例中的膨胀算法如下:对于待操作的像素I(x,y)=0I(x,y)=0I(x,y)=0,I(x,y−1)I(x, y-1)I(x,y−1),I(x−1,y)I(x-1, y)I(x−1,y),I(x+1,y)I(x+1, y)I(x+1,y

2022-05-05 20:00:36 924

原创 图像处理之模式匹配

模式匹配使用误差平方和算法进行模式匹配使用误差平方和进行模式匹配。将neo-temp.png在neo.png中匹配的图像使用红框框出来。模式匹配,即寻找待匹配图像和全体图像中最相似的部分,用于物体检测任务。现在虽然使用卷积神经网络(CNN)来检测物体,但是模式识别仍然是最基本的处理方法。下面介绍具体算法。原图像记为I(H×W)I(H\times W)I(H×W),待匹配图像为T(h×w)T(h\times w)T(h×w):对于图像III:,for ( j = 0, H-h) for ( i =

2022-04-16 22:06:00 1050

原创 图像插值处理

图像插值处理问题描述:读取图像,然后对图像进行最近邻插值、双线性插值、双三次插值处理。本文主要侧重于代码的实现,相关的原理性介绍可参考最邻近插值最近邻插值 法的优点是计算量很小,算法也简单,因此运算速度较快。但它仅使用离待测采样点最近的像素的灰度值作为该采样点的灰度值,而没考虑其他相邻像素点的影响,因而重新采样后灰度值有明显的不连续性,图像质量损失较大,会产生明显的马赛克和锯齿现象。可采用下述公示进行图像的最邻近插值,其中I′I'I′为放大后图像,III为放大前图像,aaa为放大率,方括号是四舍

2022-03-18 17:33:21 355

原创 图像仿射变换

仿射变换问题描述:读取图像,然后对图像多种仿射变换。仿射变换-缩放与平移现在我们可以利用3×33\times33×3的矩阵来对图像进行多种仿射变换。现,我们记原图像为(x,y)(x,y)(x,y),变换后的图像为(x′,y′)(x',y')(x′,y′)。对于二维空间上的坐标操作,其变换关系满足(在此处,我们可以将此变换操作理解为图像的放大缩小矩阵)下式:(x′y′)=(abcd) (xy)\left(\begin{matrix}x'\\y'\end{matrix}\ri

2022-03-17 23:47:12 328

原创 伽马校正-

伽马校正问题描述:读取图像,然后对图像进行伽玛校正。伽马校正这里是一篇写伽马校正比较好的文章,我觉得可以作为背景知识补充。伽马校正用来对照相机等电子设备传感器的非线性光电转换特性进行校正。如果图像原样显示在显示器等上,画面就会显得很暗。伽马校正通过预先增大 RGB 的值来排除显示器的影响,达到对图像修正的目的。由于下式引起非线性变换,在该式中,xxx被归一化,限定在[0,1][0,1][0,1]范围内。ccc是常数,ggg为伽马变量(通常取2.22.22.2):x′=c Iingx

2022-03-15 22:37:00 1133

原创 直方图的转化

直方图问题描述:读取图像,然后图像的直方图进行归一化与均衡化。归一化归一化直方图的操作被称作灰度变换(Grayscale Transformation)。它描述的是像素点取值范围从[c,d][c,d][c,d]转换到[a,b][a,b][a,b]的过程。下面我们将imori_dark.jpeg的灰度扩展到[0,255][0, 255][0,255]范围:xout={a(ifxin<c)b−ad−c (xin−c)+a(else ifc≤xin<d)b(else)x

2022-03-14 23:18:36 352

原创 常用的边缘检测滤波器

常用的边缘检测滤波器使用常见的边缘检测滤波器(3×33\times33×3)大小,对fate.jpeg进行图像处理。MAX- MIN滤波器:边缘检测用于检测图像中的线。通常这样提取图像中的信息的操作被称为特征提取。MAX-MIN滤波器是一种常见的边缘检测滤波器,其使用网格内像素的最大值和最小值的差值对网格内像素重新赋值。边缘检测通常在灰度图像上进行。MAX-MIN滤波器:// max_min_filtercv::Mat max_min_filter(cv::Mat img, int ker

2022-03-12 21:42:40 7805

原创 高斯与LoG滤波器

高斯与LoG滤波器高斯滤波器:使用高斯滤波器(7×77\times77×7)大小,对fate.jpeg进行降噪处理。高斯滤波器是一种可以使图像平滑的滤波器,用于去除噪声。它将中心像素周围的像素按照高斯分布加权平均进行平滑化。这样的(二维)权值通常被称为卷积核(kernel)或者滤波器(filter)。考虑到图像的长宽可能不是滤波器大小的整数倍,我们需要在图像的边缘补000。这种方法称作Zero Padding。并且权值ggg(卷积核)要进行归一化操作(∑ g=1\sum\ g = 1∑&

2022-03-10 23:42:14 1527

原创 均值、中值以及Motion滤波器

均值、中值与Motion Filter问题描述:使用三种滤波器(7×77\times77×7)大小,来对fate.jpeg进行图像处理。代码如下(示例):#include <opencv2/core.hpp>#include <opencv2/highgui.hpp>#include <math.h>cv::Mat mean_filter(cv::Mat img, int kernel_size){ int row = img.rows;

2022-03-09 23:59:30 4069

原创 图像处理之池化

平均池化与最大池化问题描述:将彩色图像进行平均池化与最大池化代码如下(示例):#include <opencv2/core.hpp>#include <opencv2/highgui.hpp>#include <math.h>// average poolingcv::Mat average_pooling(cv::Mat img) { int width = img.cols; int height = img.cols; in

2022-03-09 10:44:35 4635

原创 图像处理之灰度图像转换与二值化

灰度图像与二值化问题描述:将彩色图像转换为灰度图像并进行二值化处理代码如下(示例):#include <opencv2/opencv.hpp>cv::Mat BGR2GRAY(cv::Mat img){ int width = img.cols; int height = img.rows; // CV_8UC1代表单通道的8bit array数组 cv::Mat new_image = cv::Mat::zeros(height, width, CV

2022-03-06 23:36:10 3743

原创 图像处理之通道交换

通道交换问题描述:读取图像,然后将RGB\text{RGB}RGB通道替换成BGR\text{BGR}BGR通道。代码如下(示例):#include <opencv2/opencv.hpp>// 通道交换cv::Mat channel_swap(cv::Mat img){ int width = img.cols; int height = img.rows; cv::Mat new_image = cv::Mat::zeros(height, widt

2022-03-03 23:51:06 686

原创 友元---

友元1. 创建友元有元函数的声明创建友元函数的第一步是将其原型放在类声明中,并在原型声明前加上关键字friend:friend Time operator*(double m, const Time & t);该原型意味着下面两点:虽然operator*()函数是在类声明中声明的,但它不是成员函数,因此不能使用成员函数运算符来调用;虽然operator*()函数不是成员函数,但它与成员函数的访问权限相同。友元函数重载示例计算时间:#ifndef __MYTIME4_H__

2022-03-01 23:24:03 82

原创 运算符重载

类的使用1. 运算符重载要重载运算符,需要使用被称为运算符函数的特殊函数形式。运算符的格式:operatorop(argument-list)operator+() // 重载+运算符operator*() // 重载*运算符运算符重载示例计算时间:// mytime0.h#ifndef MYTIME0_H_#define MYTIME0_H_class Time{private: int hours; int minutes;public: Time()

2022-03-01 00:05:44 75

原创 类的构造函数与析构函数

类的构造函数与析构函数1. 类的构造函数与析构函数类的基本思想是数据抽象和封装。数据抽象是一种依赖于接口和实现分离的编程技术。类的接口包括用户所能执行的操作;类的实现则包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。类是一种将抽象转换为用户定义类型的C++工具,它将数据表示和操纵数据的方法组合成一个整洁的包。一般来说,类规范由两部分组成:类声明: 以数据成员的方式描述数据部分,以成员函数(被称为方法)的方式描述公有接口。类方法定义:描述如何实现类成员函数。简单的说,

2022-02-26 11:37:09 410

原创 C++类--

C++类类的定义类的基本思想是数据抽象和封装。数据抽象是一种依赖于接口和实现分离的编程技术。类的接口包括用户所能执行的操作;类的实现则包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。类是一种将抽象转换为用户定义类型的C++工具,它将数据表示和操纵数据的方法组合成一个整洁的包。一般来说,类规范由两部分组成:类声明: 以数据成员的方式描述数据部分,以成员函数(被称为方法)的方式描述公有接口。类方法定义:描述如何实现类成员函数。简单的说,类声明提供了类的蓝图,而方法定义则

2022-02-25 23:20:59 422

原创 函数---

函数函数基础一个典型的函数定义包括:返回类型、函数名、由0个或多个形参组成的列表以及函数体。其中,形参以逗号隔开,形参的列表位于一对圆括号内。通过调用运算符来执行函数。调用运算符的形式是一对圆括号,它作用于一个表达式,该表达式是函数或者指向函数的指针;圆括号内是一个用逗号隔开的实参列表,我们用实参初始化函数的姓参(实参是形参的初始值)。函数返回类型不能是数组类型或者函数类型,但可以是指向数组或函数的指针。函数声明:函数三要素(返回类型、函数名、形参类型)描述了函数的接口,说明了函数的全部信息。函

2022-02-23 23:50:36 92

原创 数组----

数组定义和初始化内置数组显式初始化数组元素如果维度比提供的初始值数量大,则用提供的初始值初始化靠前的元素,剩下的元素被初始化为默认值。const unsigned sz = 3; // 维度必须是一个常量表达式int ia1[sz] = {0, 1, 2}; // 含有三个元素的数组,元素值为0,1,2int a2[] = {0, 1, 2}; // 纬度为3的数组int a3[5] = {0, 1, 2}; // 等价于a3[]

2022-02-22 00:05:41 364

原创 标准库类型vector

标准库类型vector定义和初始化vector对象列表初始化vector对象vector<string> articles = {"a", "an", "the"}; 创建指定数量的元素vector<int> ivec(10, -1); // 10个int类型元素,每个都被初始化为-1vector<string> svec(10, "hi!"); // 10个string类型元素,每个都被初始化为“hi!”值初始化通常情况下,可以只提供ve

2022-02-20 23:17:57 85

原创 标准库类型string

标准库类型string定义和初始化string对象如果使用等号初始化一个变量,实际上执行的是拷贝初始化,编译器把等号右侧的初始值拷贝到新创建的对象中去。与之相反,如果不使用等号,则执行的是直接初始化。#include <string>using std::stringstring s1; // 默认初始化,s1是一个空串string s2 = s1; // s2是s1的副本string s3 = "hiya";

2022-02-20 22:34:41 88

原创 C++ 变量和基本类型

变量和基本类型

2022-02-17 00:04:27 125

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除