一、读取保存图片
Mat scrImage = imread("1.jpg");
//显示图像
imshow("原图", scrImage);
//窗口等待
waitKey(2000);
//窗口销毁
destroyAllWindows();
//图片另存为
//imwrite("D://");
return 0;
二、图片的腐蚀操作
Mat srcImage = imread("1.jpg");
//显示原图
resize(srcImage, srcImage, Size(srcImage.cols / 4, srcImage.rows / 4));
imshow("原图", srcImage);
//进行腐蚀操作
//获取图像的指定形状和尺寸的结构元素矩形:MORPH_RECT;交叉形:MORPH_CROSS;椭圆形:MORPH_ELLIPSE;
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));//结构元素(内核矩阵)的尺寸15x15
Mat dstImage;
//erode腐蚀
erode(srcImage, dstImage, element);
//显示效果图
imshow("效果图",dstImage);
三、均值滤波(图片模糊处理)
Mat srcImage1;
//读入图片
Mat srcImage = imread("3.jpg");
//缩小显示原图
resize(srcImage, srcImage1, Size(srcImage.cols/4,srcImage.rows/4));
imshow("原图", srcImage1);
//均值滤波模糊图片
Mat dstImage;
blur(srcImage1, dstImage, Size(7, 7));//滤波模板kernel的尺寸,一般使用Size(w, h)来指定,如Size(3,3)
//显示效果图
imshow("效果图", dstImage);
四、Canny算子边缘检测
//读入图片
Mat srcImage = imread("3.jpg");
Mat srcImage1;
resize(srcImage, srcImage1, Size(srcImage.cols / 4, srcImage.rows / 4));
//定义
Mat dstImage, edge, grayImage;
//【1】创建与src同类型和大小的矩阵(dst)
//dstImage.create(srcImage.size(), srcImage.type());
//转为灰度图
cvtColor(srcImage1, grayImage, COLOR_BGR2GRAY);
//均值滤波
blur(grayImage, edge, Size(3, 3));
//Canny算子
Canny(edge, edge, 3, 9, 3);//3,9表示阈值最后一个参数3*3的算子
//【5】显示效果图
imshow("【效果图】Canny边缘检测", edge);
//********************************//
cvCanny
函数功能:采用Canny方法对图像进行边缘检测 函数原型: void cvCanny( const CvArr* image, CvArr* edges, double threshold1,double threshold2, int aperture_size=3 ); 函数说明: 第一个参数表示输入图像,必须为单通道灰度图。 第二个参数表示输出的边缘图像,为单通道黑白图。 第三个参数和第四个参数表示阈值,这二个阈值中当中的小阈值用来控制边缘连接,
大的阈值用来控制强边缘的初始分割即如果一个像素的梯度大与上限值,则被认为是边缘像素,
如果小于下限阈值,则被抛弃。如果该点的梯度在两者之间则当这个点与高于上限值的像素点连接时我们才保留,否则删除。 第五个参数表示Sobel 算子大小,默认为3即表示一个3*3的矩阵。Sobel 算子与高斯拉普拉斯算子都是常用的边缘算子,详细的数学原理可以查阅专业书籍。 好文要顶 关注我 收藏该文
//********************************//
五、读取视屏
//读入视屏
VideoCapture capture("1.avi");
//循环显示每一帧
while (1)
{
Mat frame;//定义变量,存储每一帧的图像
capture >> frame;//读取当前的帧数
imshow("读取视屏", frame);//显示当前帧
waitKey(30);
}
return 0;
六、调用摄像头
//调用摄像头
VideoCapture capture(0);
//循环显示每一帧
while (1)
{
Mat frame; //定义一个Mat变量,用于存储每一帧的图像9u【 capture >> frame; //读取当前帧
imshow("读取视频", frame); //显示当前帧
waitKey(30); //延时30ms
}
return 0;
七、Log变换
Mat image = imread("5.png");
Mat imageLog(image.size(), CV_32FC3);//定义一个和原图一样大小,浮点型
float c = 0.1;
for (int i = 0; i < image.rows; i++)
{
for (int j = 0; j < image.cols; j++)
{
imageLog.at<Vec3f>(i, j)[0] = c * log(1 + image.at<Vec3b>(i,j)[0]);
imageLog.at<Vec3f>(i, j)[1] = c * log(1 + image.at<Vec3b>(i, j)[1]);
imageLog.at<Vec3f>(i, j)[2] = c * log(1 + image.at<Vec3b>(i, j)[2]);
}
}
//归一化到0~255
normalize(imageLog, imageLog, 0, 255, CV_MINMAX);
//转换成8bit图像显示
convertScaleAbs(imageLog, imageLog);
imshow("原图",image);
imshow("图二", imageLog);
八、幂变换
Mat img = imread("3.jpg");//读入图片,0表示读入灰度图
resize(img, img, Size(img.cols / 4, img.rows / 4));
//浮点变换
Mat fimg(img.size(), CV_32FC3);
img.convertTo(fimg, CV_32FC3,1/255.0);
float e = 0.5;//针对不同的照片进行取值
//将修改后的像素值存入另一个照片
Mat fimg2(fimg.size(), CV_32FC3);
for (int i = 0; i < fimg.rows; i++)
{
for (int j = 0; j < fimg.cols; j++)
{
fimg2.at<Vec3f>(i, j)[0] = float(pow(fimg.at<Vec3f>(i, j)[0], e));
fimg2.at<Vec3f>(i, j)[1] = float(pow(fimg.at<Vec3f>(i, j)[1], e));
fimg2.at<Vec3f>(i, j)[2] = float(pow(fimg.at<Vec3f>(i, j)[2], e));
}
}
imshow("原图", img);
imshow("rgb", fimg2);
waitKey(0);
九、添加椒盐噪声
Mat add(Mat img, int n)
{
Mat dstimage = img.clone();
for (int k = 0; k < n; k++)
{
//随机取值行列
int i = rand() % dstimage.rows;
int j = rand() % dstimage.cols;
//图像通道判定
if (dstimage.channels() == 1)
{
dstimage.at<uchar>(i, j) = 255;//椒噪声
}
else
{ dstimage.at<Vec3b>(i, j)[0] = 255;
dstimage.at<Vec3b>(i, j)[1] = 255;
dstimage.at<Vec3b>(i, j)[2] = 255;
}
}
for (int k = 0; k < n; k++)
{
//随机取值行列
int i = rand() % dstimage.rows;
int j = rand() % dstimage.cols;
//图像通道判定
if (dstimage.channels() == 1)
{
dstimage.at<uchar>(i, j) = 0; //椒噪声
}
else
{
dstimage.at<Vec3b>(i, j)[0] = 0;
dstimage.at<Vec3b>(i, j)[1] = 0;
dstimage.at<Vec3b>(i, j)[2] = 0;
}
}
return dstimage;
}

opencv基本函数详解笔记的更多相关文章

  1. TCP-IP详解笔记8

    TCP-IP详解笔记8 TCP超时与重传 下层网络层(IP)可能出现丢失, 重复或丢失包的情况, TCP协议提供了可靠的数据传输服务. TCP启动重传操作, 重传尚未确定的数据. 基于时间重传. 基于 ...

  2. TCP-IP详解笔记7

    TCP-IP详解笔记7 TCP: 传输控制协议(初步) 使用差错校正码来纠正通信问题, 自动重复请求(Automatic Repeat Request, ARQ). 分组重新排序, 分组复制, 分组丢 ...

  3. TCP-IP详解笔记6

    TCP-IP详解笔记6 用户数据报协议和IP分片 UDP是一种保留消息边界的面向数据报的传输层协议. 不提供差错纠正, 队列管理, 重复消除, 流量控制和拥塞控制. 提供差错检测, 端到端(end-t ...

  4. TCP-IP详解笔记5

    TCP-IP详解笔记5 ICMPv4和ICMPv6: Internet控制报文协议 Internet控制报文协议(Internet Control Message Protocol, ICMP)与IP ...

  5. TCP-IP详解笔记4

    TCP-IP详解笔记4 系统配置: DHCP和自动配置 每台主机和路由器需要一定的配置信息,配置信息用于为系统指定本地名称,及为接口指定标识符(如IP地址). 提供或使用各种网络服务,域名系统(DNS ...

  6. TCP-IP详解笔记3

    TCP-IP详解笔记3 地址解析协议 IP协议的设计目标是为跨越不同类型物理网络的分组交换提供互操作. 网络层软件使用的地址和底层网络硬件使用的地址之间进行转换. 对于TCP/IP网络,地址解析协议( ...

  7. http详解笔记

    http详解笔记 http,(HyperText Transfer Protocol),超文本传输协议,亦成为超文本转移协议   通常使用的网络是在TCP/IP协议族的基础上运作的,HTTP属于它的一 ...

  8. 【TCP/IP】TCP详解笔记

    目录 前言 17. TCP 传输控制协议 17.1 引言 17.2 TCP 服务 17.3 TCP的首部 18. TCP连接的建立与终止 18.1 引言 18.2 连接的建立与终止 18.2.1 建立 ...

  9. CDN技术详解笔记

    1.影响网络传输的四个因素(1)“第一公里”:网站服务器接入互联网的链路所能提供的带宽.(2)“最后一公里”:用户接入带宽.(3)对等互联关口:不同网络之间的互联互通带宽.(4)长途骨干传输:首先是长 ...

  10. 【openCV学习笔记】在Mac上配置openCV步骤详解

    (1)安装Homebrew:(需要Ruby) 注:因为snow leopard 以后已经自带Ruby了,所有可以不用自己安装Ruby. 看一下Homebrew的官网: http://mxcl.gith ...

随机推荐

  1. react native 布局问题

    1. Text组件里面的 文字垂直居中 <Text style={styles.confirmButtonStyle}>确认</Text> confirmButtonStyle ...

  2. 在C#中Release与Debug的区别小案例

    我们都听说过C#写的代码 Release通常会比Debug性能要好一点跑得快一些. 先普及一些相关基础知识: (1)在CLR中将对sbyte.byte.short.ushort.int.uint.ch ...

  3. Quartz 2D实现文字镂空效果

    什么是镂空效果,下图就是一个镂空效果的文字: 从图可知,文字是透明的,可以看到下面的图片内容,而UILabel其它部分是白色背景. 使用Quartz 2D绘制镂空效果,大体思路如下: 实现一个UILa ...

  4. reduce()

    from functools import reducea=[10,11,22,33]b=reduce(lambda x,y:x+y,a)<===>sum(a)print(b)

  5. ThinkPHP接收header自定义参数

    // 请求拦截,配置Token等参数 Vue.prototype.$u.http.interceptor.request = (config) => { config.header['conte ...

  6. oracle 分配权限命令

    Oracle分配权限 以管理员身份登录数据库 创建用户:create user [username] identified by [password]; 赋予登录权限:grant create ses ...

  7. python40

    Python Number 数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值,将重新分配内存空间. 以下实例在变量赋值时 Number 对象将被创建: v ...

  8. SpringMVC文件上传详解

    声明 源码基于Spring Boot 2.3.12.RELEASE.Spring Framework 5.2.15.RELEASE Servlet3.0 文件上传 Servlet 3.0对于HttpS ...

  9. thirty-two(模型点击展示)react-three-fiber

    模型点击蒙版展示 点击展示目的(用户需要看见模型中更加多的内容信息) 使用技术 ThreeJs.React-three-fiber.React-three-drei.React.css 整体思路:   ...

  10. onnxruntime源码解析之C接口简介

    一.C接口 1. 简介 其他语言的接口都是在C接口的基础上,进一步的封装. C的接口头文件为:onnxruntime_c_api.h 头文件内包含了详细的注释和说明. 总体上,除了一些数据结构的定义, ...