opencv基本函数详解笔记
一、读取保存图片
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基本函数详解笔记的更多相关文章
- TCP-IP详解笔记8
TCP-IP详解笔记8 TCP超时与重传 下层网络层(IP)可能出现丢失, 重复或丢失包的情况, TCP协议提供了可靠的数据传输服务. TCP启动重传操作, 重传尚未确定的数据. 基于时间重传. 基于 ...
- TCP-IP详解笔记7
TCP-IP详解笔记7 TCP: 传输控制协议(初步) 使用差错校正码来纠正通信问题, 自动重复请求(Automatic Repeat Request, ARQ). 分组重新排序, 分组复制, 分组丢 ...
- TCP-IP详解笔记6
TCP-IP详解笔记6 用户数据报协议和IP分片 UDP是一种保留消息边界的面向数据报的传输层协议. 不提供差错纠正, 队列管理, 重复消除, 流量控制和拥塞控制. 提供差错检测, 端到端(end-t ...
- TCP-IP详解笔记5
TCP-IP详解笔记5 ICMPv4和ICMPv6: Internet控制报文协议 Internet控制报文协议(Internet Control Message Protocol, ICMP)与IP ...
- TCP-IP详解笔记4
TCP-IP详解笔记4 系统配置: DHCP和自动配置 每台主机和路由器需要一定的配置信息,配置信息用于为系统指定本地名称,及为接口指定标识符(如IP地址). 提供或使用各种网络服务,域名系统(DNS ...
- TCP-IP详解笔记3
TCP-IP详解笔记3 地址解析协议 IP协议的设计目标是为跨越不同类型物理网络的分组交换提供互操作. 网络层软件使用的地址和底层网络硬件使用的地址之间进行转换. 对于TCP/IP网络,地址解析协议( ...
- http详解笔记
http详解笔记 http,(HyperText Transfer Protocol),超文本传输协议,亦成为超文本转移协议 通常使用的网络是在TCP/IP协议族的基础上运作的,HTTP属于它的一 ...
- 【TCP/IP】TCP详解笔记
目录 前言 17. TCP 传输控制协议 17.1 引言 17.2 TCP 服务 17.3 TCP的首部 18. TCP连接的建立与终止 18.1 引言 18.2 连接的建立与终止 18.2.1 建立 ...
- CDN技术详解笔记
1.影响网络传输的四个因素(1)“第一公里”:网站服务器接入互联网的链路所能提供的带宽.(2)“最后一公里”:用户接入带宽.(3)对等互联关口:不同网络之间的互联互通带宽.(4)长途骨干传输:首先是长 ...
- 【openCV学习笔记】在Mac上配置openCV步骤详解
(1)安装Homebrew:(需要Ruby) 注:因为snow leopard 以后已经自带Ruby了,所有可以不用自己安装Ruby. 看一下Homebrew的官网: http://mxcl.gith ...
随机推荐
- windows下搭建nrf52832nordic_ble_sniffer_3.0+wireshark抓包环境
准备工具 pythone3.7安装包 https://www.python.org/ftp/python/3.7.7/python-3.7.7-amd64.exe Wireshark-win64-3. ...
- JavaScript基础知识整理(对象的属性)
对象的定义 无序属性的集合,属性可以包括基本值,对象或函数. JavaScript中有两类属性,数据属性和访问器属性. 特征值 JavaScript使用特征值来描述属性的行为,因为是为实现JavaSc ...
- [canvas]ncaught TypeError: Cannot read properties of null (reading 'getContext')
相信你和我一样是直接复制大佬的js代码(笑) ------------ 主要问题在于:js先加载完了,html才加载,导致js获取不了html的对象 解决办法: 把 <head /> ...
- top单核与32C--CPU爆表
linux的cpu使用频率是根据cpu个数和核数决定的 top, 然后你按一下键盘的1,这就是单个核心的负载,不然是所有核心的负载相加,自然会超过100 单核为100%,服务器是32核的,下面基本用了 ...
- Oracle的Pctfree
1.创建一张表 create table student( student_id number ); 但是在pl/sql中查看却是以下的建表语句: -- Create table create tab ...
- ELKF搭建
logstash cat /etc/logstash/logstash.yml |grep -v '#'path.data: /data/logstash/datapipeline.ordered: ...
- TDengine上手笔记
TDengine简介 TDengine 是一款开源.高性能.云原生的时序数据库,且针对物联网.车联网.工业互联网.金融.IT 运维等场景进行了优化.您可以像使用关系型数据库 MySQL 一样来使用它. ...
- Intel oneAPI 环境变量设置
因工作需要,需要在linux系统配置多个不同环境的库,需要使用environment-modules工具管理环境变量,为保持配置方法的一致性,也使用modulefile文件加载Intel oneAPI ...
- Rocky linux command-1
在Linux下一切皆文件 everything is file,包括目录也是文件的一种而这些文件被分为七种类型: • -:普通文件 • d: 目录文件 • b: 块设备 • c: 字符设备 • l: ...
- Open review Mitigating Propagation Failures in PINNs using Evolutionary Sampling
与Mitigating Propagation failures in PINNs using Evolutionary Sampling - Orange0005 - 博客园 (cnblogs.co ...