一、读取保存图片
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;
}

最新文章

  1. Hibernate之lazy延迟加载
  2. bootstrap 时间控件带(时分秒)选择器
  3. 《BI项目笔记》无法解密受保护的 XML 节点“DTS:Password” 解决办法
  4. 在CentOS 6上搭建私有的Docker Registry
  5. hdu 4604 Deque(最长不下降子序列)
  6. Java接口的表现形式
  7. Mongodb FAQ fundamentals(基础篇)
  8. this、call和apply
  9. tq --uboot使用
  10. 判斷作業系統為 64bit 或 32bit z
  11. 怎么查看mysql执行过的sql。
  12. hadoop-mapreduce在maptask执行分析
  13. Topshelf创建Windows服务
  14. 蜗牛—JSP学习乘法表页面输出
  15. HIT 1917 Peaceful Commission
  16. spark MLlib collaborativeFilltering学习
  17. 大数据不就是写SQL吗?
  18. CentOS7.3上如何安装Apache/2.4.34
  19. java虚拟机学习-Java常量池理解与总结(13-2)
  20. RecyclerView--添加头部和底部

热门文章

  1. firefox 利用 Selenium IDE 对 DBackup 进行自动化测试
  2. FSL--fsleyes建立软连接方法
  3. Ubuntu安装微信/企业微信
  4. axios和ajax对响应是文件流用blob处理
  5. kafka删除topic清空数据
  6. mongodb-命令小结
  7. 直播平台搭建源码,canvas 画一条波浪线 进度条
  8. lib_0001_file_manager.py
  9. ansible笔记第二章(ansible-varable变量)
  10. Qt多线程编程之QThreadPool 和 QRunnable使用