OpenCV实现图象翻转、滤波、锐化
OpenCV实现图象翻转、滤波、锐化
注:以下代码,使用opencv库函数实现了对图片的翻转、灰度图转换、各种滤波、各种锐化。
库函数相关参数及说明参阅:OpenCV中文站=》opencv教程(cn)
#include <iostream>
#include <stdio.h>
#include <Windows.h>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/imgproc/types_c.h>
#include <opencv2/core/core.hpp>
#include <opencv2/opencv.hpp> using namespace std;
using namespace cv; //全局变量
const int slider_max = ;
int slider;
Mat img;
Mat resImg; Mat src, res[]; //翻转图片
void turn(string src)
{
Mat srcMat = imread(src);
if (!srcMat.data)
{
cout << "源图象获取失败!" << endl;
return;
}
//原始图像
imshow("原图片", srcMat);
//水平翻转
flip(srcMat, res[], );
imshow("水平翻转", res[]);
imwrite("D:\\trashBox\\testIMG\\flip1.jpg", res[]);
//垂直翻转
flip(srcMat, res[], );
imshow("垂直翻转", res[]);
imwrite("D:\\trashBox\\testIMG\\flip0.jpg", res[]);
} //图像平滑处理(滤波)
void blur(string src)
{
Mat srcMat = imread(src);
if (!srcMat.data)
{
cout << "源图象获取失败!" << endl;
return;
}
//源图片
imshow("源图片", srcMat);
//中值滤波
medianBlur(srcMat, res[], );
imshow("中值滤波", res[]);
imwrite("D:\\trashBox\\testIMG\\medianBlur.jpg", res[]);
//均值滤波
blur(srcMat, res[], Size(, ), Point(-, -));
imshow("均值滤波", res[]);
imwrite("D:\\trashBox\\testIMG\\averBlur.jpg", res[]);
//高斯滤波
GaussianBlur(srcMat, res[], Size(, ), , );
imshow("高斯滤波", res[]);
imwrite("D:\\trashBox\\testIMG\\gsBlur.jpeg", res[]);
} //图象锐化:高通滤波
void sharpen(string src)
{
Mat srcMat = imread(src);
if (!srcMat.data)
{
cout << "源图象获取失败!" << endl;
return;
}
//原图
imshow("源图片", srcMat);
//灰度图
cvtColor(srcMat, res[], CV_BGR2GRAY);
imshow("灰度图象", res[]);
imwrite("D:\\trashBox\\testIMG\\grey.jpg", res[]);
//sobel算子,基于梯度
Sobel(res[], res[], res[].depth(), , , , , , BORDER_DEFAULT);
imshow("X水平Sobel", res[]);
imwrite("D:\\trashBox\\testIMG\\sobelX.jpg", res[]);
Sobel(res[], res[], res[].depth(), , , , , , BORDER_DEFAULT);
imshow("Y方向Sobel", res[]);
imwrite("D:\\trashBox\\testIMG\\sobelY.jpg", res[]);
//sobel叠加
convertScaleAbs(res[], res[]);
convertScaleAbs(res[], res[]);
addWeighted(res[], 0.5, res[], 0.5, , res[]);
imshow("叠加Sobel", res[]);
imwrite("D:\\trashBox\\testIMG\\sobelXY.jpg", res[]); //laplace算子, 基于二阶微分
Laplacian(res[], res[], res[].depth(), , , , BORDER_DEFAULT);
convertScaleAbs(res[], res[]);
imshow("Laplace算子边缘检测", res[]);
imwrite("D:\\trashBox\\testIMG\\laplace.jpg", res[]);
} //直方图
void hist(string src)
{
Mat srcMat = imread(src);
if (!srcMat.data)
{
cout << "源图象获取失败!" << endl;
return;
}
//直方图均衡化
cvtColor(srcMat, res[], CV_BGR2GRAY);//转灰度图像
imshow("灰度图", res[]);
equalizeHist(res[], res[]);
imshow("直方图均衡化", res[]);
imwrite("D:\\trashBox\\equalHist.jpg", res[]);
} //颜色减半
void colorReduce(Mat& input, Mat& output, int div);
void on_trackbar(int pos, void *); //迭代器实现颜色减半
void colorReduce(Mat& input, Mat& output, int div)
{
output = input.clone(); Mat_<Vec3b>::iterator it = input.begin<Vec3b>();
Mat_<Vec3b>::iterator itend = input.end<Vec3b>(); Mat_<Vec3b> cimage = output;
Mat_<Vec3b>::iterator itout = cimage.begin();
Mat_<Vec3b>::iterator itoutend = cimage.end(); for (; it != itend; it++, itout++)
{
for(int i=; i<; i++)
(*itout)[i] = (*it)[i] / div * div + div / ;//200-249->0-29压缩灰度级,用中间值代替
}
//output = cimage;
//imshow("源图片", input);
//imshow("颜色减半图片", output);
} //trackBar 回调函数
void on_trackbar(int pos, void *)
{
if (pos <= )
{
resImg = img;
}
else
{
colorReduce(img, resImg, pos);
}
imshow("显示结果", resImg);
} int main()
{
//**************此部分代码调用翻转、滤波、锐化函数*******************//
//string lena = "D:\\trashBox\\testIMG\\lena.bmp";
//string tiger = "D:\\trashBox\\testIMG\\tiger.jpg";
//string xian = "D:\\trashBox\\testIMG\\xian.jpg";
//turn(lena);
//blur(tiger);
//blur(lena);
//sharpen(xian);
//sharpen(xian);
//hist(lena);
//**************************************************************// //********************此部分代码实现图象的颜色减半******************//
Mat src, res;
img = imread("D:\\trashBox\\photo.jpg");
if (!img.data)
{
cout << "源图象获取失败!" << endl;
return ;
}
namedWindow("原图像");
namedWindow("显示结果"); slider = ;
createTrackbar("ColorReduce", "显示结果", &slider, slider_max, on_trackbar); imshow("原图像", img);
imshow("显示结果", img); waitKey();
}
OpenCV实现图象翻转、滤波、锐化的更多相关文章
- 积分图实现均值滤波的CUDA代码
没想到我2010年买的笔记本显卡GT330M 竟然还能跑CUDA,果断小试了一把,环境为CUDA6.5+VS2012,写了一个积分图实现均值滤波.类似于OpenCV的blur()函数. 使用lena. ...
- 第三节,使用OpenCV 3处理图像(模糊滤波、边缘检测)
一 不同色彩空间的转换 OpenCV中有数百种关于在不同色彩空间之间转换的方法.当前,在计算机中有三种常用的色彩空间:灰度,BGR以及HSV(Hue,Saturation,Value). 灰度色彩空间 ...
- 14、OpenCV实现图像的空间滤波——图像锐化及边缘检测
1.图像锐化理论基础 1.锐化的概念 图像锐化的目的是使模糊的图像变得清晰起来,主要用于增强图像的灰度跳变部分,这一点与图像平滑对灰度跳变的抑制正好相反.而且从算子可以看出来,平滑是基于对图像领域的加 ...
- Python+OpenCV图像处理(七)—— 滤波与模糊操作
过滤是信号和图像处理中基本的任务.其目的是根据应用环境的不同,选择性的提取图像中某些认为是重要的信息.过滤可以移除图像中的噪音.提取感兴趣的可视特征.允许图像重采样等等.频域分析将图像分成从低频到高频 ...
- 【opencv基础】图像翻转cv::flip详解
前言 在opencv中cv::flip函数用于图像翻转和镜像变换. 具体调用形式 void cv::flip( cv::InputArray src, // 输入图像 cv::OutputArray ...
- opencv—读取一张图片并滤波
#include <opencv2\opencv.hpp> #include <iostream> #include <string> using namespac ...
- 基于Opencv的自适应中值滤波函数selfAdaptiveMedianBlur()
7.3.3 自适应滤波器 自适应中值滤波器 对于7.3.2节所讨论的中值滤波器,只要脉冲噪声的空间密度不大,性能还是可以的(根据经验需Pa和Pb小于0.2).本节将证明,自适应中值滤波器可以处理更大概 ...
- OpenCV 之 图象几何变换
二维平面中,图像的几何变换有等距.相似.仿射.投影等,如下所示: 1 图象几何变换 1.1 等距变换 等距变换 (Isometric Transformation),是一种二维的刚体变换,可理解为 ...
- opencv实现图像邻域均值滤波、中值滤波、高斯滤波
void CCVMFCView::OnBlurSmooth()//邻域均值滤波 { IplImage* in; in = workImg; IplImage* out = cvCreateImage( ...
随机推荐
- 26Flutter 日期 和时间戳/格式化日期库/flutter异步/ 官方自带日期组件showDatePicker、时间组件showTimePicker以及国际化
/* 一.Flutter日期和时间戳 日期转换成时间戳 var now=newDateTime.now(); print(now.millisecondsSinceEpoch); //单位毫秒,13位 ...
- Greenwich.SR2版本的Spring Cloud Zipkin实例
调用链跟踪是微服务架构中的基础能力,Spring Cloud Zipkin+Sleuth为我们提供了该能力.首先我们先建立Zipkin服务端,它需要集成Eureka,用于发现服务提供方和消费方,进行数 ...
- Qt编写自定义控件57-直方波形图
一.前言 直方波形图控件非原创控件,控件大全中大概有20-30个控件非自己原创,而是参考了网上开源的代码,自己加以整理和完善,新增了插件的代码使得可以直接集成到QtDesigner或者QtCreato ...
- MySQL 5.6 my.cnf优化后的标准配置(4核 16G Centos6.5 x64)
[client] port = 3306 socket = /var/lib/mysql/mysql.sock [mysql] #这个配置段设置启动MySQL服务的条件:在这种情况下,no-auto- ...
- 【设计思路】Booking优化
https://www.uisdc.com/booking-redesign https://medium.muz.li/booking-com-ux-case-study-7ffb39e54791
- nginx+mysql双主搭建
说明:mysql双主架构经过测试在生产环境中使用没有问题,但是还是建议使用读写分离, Mysql主主同步环境部署: centos 7.4 三台云主机:mysql1 :10.1.1.142 mysql2 ...
- html设置多个div并排显示
我这里以4个div为例,html代码如下: <body> <div id="column1" style="background-color: blue ...
- 在Electron运行的子页面无法访问window.opener解决方案
我们的首页有一个window.open打开子页面后反向刷新父页面的功能,但是主页面如果开启了nodeIntegration=true,这个时候再设置nativeWindowOpen是不启作用的.再被w ...
- python for循环 - python基础入门(11)
在python开发中,除了前篇文章介绍的while循环还有一个for循环也经常使用,两者使用都是大同小异,for循环的使用相对于while循环更加灵活,下面我们一起来了解下具体区别. 一.for 循环 ...
- P4568 飞行路线【分层图最短路】
题目链接:https://www.luogu.org/problem/P4568 题目大意:给定n个点,m条无向边,k次机会经过边时代价为 0 .给出起点和终点,求其最短路径. 解题思路: 两种方法, ...