一、读取保存图片
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 使用链表遍历组件树

    React 为在有限的资源情况下,更好地控制UI的更新,提出了时间分片的概念.以达到三个目标: performing non-blocking rendering(无阻塞渲染):applying up ...

  2. Blockchain-enabled Access Control with Fog Nodes for Independent IoTs

    摘要: 物联网设备能力有限且数量多,因此当前的传统物联网平台可能无法在可扩展性.可靠性和实时响应方面有效地处理访问控制.本文提出了一种基于区块链.雾节点和物的角色的分散式物联网访问控制系统,利用以太坊 ...

  3. 【转】【善用佳软】文件复制软件评测:FastCopy、TeraCopy、ExtremeCopy、Supercopier

    文件复制软件评测:FastCopy.TeraCopy.ExtremeCopy.Supercopier 原文:https://xbeta.info/fastcopy-teracopy-extremeco ...

  4. ASP.NET Core Filter如何支持依赖注入

    通过Filter来支持:分别有IResourceFilter AuthorizeFilter ActionFilter ExceptionFilter ResultFilter,Filter也被称为拦 ...

  5. 正整数n型方阵

    正整数n型方阵(不用数组完成) 一般呢这种n型方阵很多人都是用数组完成,今天呢小编就用简单的循环控制结构来完成,不需用到数组.题目:从键盘输入一个正整数n,根据n形成一个方阵.方阵最外层是第一层,每层 ...

  6. Go组件库总结之协程睡眠唤醒

    本篇文章我们用Go封装一个利用gopark和goready实现协程睡眠唤醒的库.文章参考自:https://github.com/brewlin/net-protocol 1.gopark和gorea ...

  7. Java包机制 与Javados 命令

    package: 定义包 import  : 导入包 com.wang.test.* :点* 是导入当前包下的所有类 @author  :注释作者名 @version :注释版本号 @since    ...

  8. linux 下彻底删除MySQL

    1.查找以前是否装有mysql 命令:rpm -qa|grep -i mysql 2.停止mysql服务.删除之前安装的mysql 删除命令:rpm -e –nodeps 包名 # rpm -ev M ...

  9. JS 根据base64获取文件宽高

    const {width, height} = await this.getImgSize(base64) async getImgSize(base64) { const image = new I ...

  10. go 的internal 目录

    Go 语言中的软件包推荐按照:组织名/项目名 的形式安排软件包的文件目录结构,一般「项目名」文件目录下还会按照功能.抽象约定.具体实现等维度再划分一些子目录.在 Go 语言里包的导入路径不同则被判定为 ...