一、读取保存图片
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. Java笔记_this关键字_HomeWork(9 - 题)

    第九题 /** * @ClassName HomeWork09 * @Description TODO * @Author Orange * @Date 2021/4/26 16:20 * @Vers ...

  2. 关于nginx隐藏index.php入口文件注意事项

    最近项目用的是nginx服务,apache怎么隐藏入口不赘述,官方文档有介绍,Nginx隐藏官方文档这样说的: 实践中,这样是不对的,应该在网站对应的vhost.conf中配置: server { l ...

  3. React使用高阶组件与Hooks实现权限拦截教程

    导读 高阶组件就是接受一个组件作为参数并返回一个新组件(功能增强的组件)的函数.这里需要注意高阶组件是一个函数,并不是组件,这一点一定要注意,本文给大家分享React高阶组件使用小结,一起看看吧 高阶 ...

  4. AUTOCAD——半径标注命令

    创建圆或圆弧的半径标注. 执行方式 命令行:DIMRADLUS 菜单栏:标注→半径标注 工具栏:半径标注图标 "半径标注操作命令位置"界面 执行以上命令后,命令行会显示以下信息: ...

  5. 把pyecharts动图导入到PPT中

    如何把echarts 动图导入PPT 置顶 且听风来 2019-05-22 14:54:17 3347 收藏 6展开 首先看PPT是否开启插件,开启后 此处就有标志,然后就在你想插入的幻灯片处插入两个 ...

  6. Vue2+Cesium1.9+热力图开发笔记

    1.安装cesiumJS.heatmap.webpack插件依赖包: yarn install/npm install "dependencies": { ... "ce ...

  7. Zebra GT800标签打印机打印时脱机并亮红灯的故障处理

    Zebra GT800标签打印机打印时脱机并亮红灯的故障处理 打印测试正常,所有设置都正常,驱动原厂的,打印时只打印一点头,把所有的东西都测试了,花了1天半时间,该摸到的点都测了一般,甚至打算把这款打 ...

  8. noi 2.1基本算法之枚举

    7647:余数相同问题 1.描述 已知三个正整数 a,b,c. 现有一个大于1的整数x,将其作为除数分别除a,b,c,得到的余数相同. 请问满足上述条件的x的最小值是多少? 数据保证x有解. 2.输入 ...

  9. uniapp全局黑白

    page{filter: grayscale(100%); } .uni-tabbar__item{filter: grayscale(100%); }

  10. java中post发送json格式数据

    /** * 发送post请求 * @param URL 数据发送地址 * @param json json格式数据内容 * @param headParams 请求头内容 * @return 请求结果 ...