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实现图象翻转、滤波、锐化的更多相关文章

  1. 积分图实现均值滤波的CUDA代码

    没想到我2010年买的笔记本显卡GT330M 竟然还能跑CUDA,果断小试了一把,环境为CUDA6.5+VS2012,写了一个积分图实现均值滤波.类似于OpenCV的blur()函数. 使用lena. ...

  2. 第三节,使用OpenCV 3处理图像(模糊滤波、边缘检测)

    一 不同色彩空间的转换 OpenCV中有数百种关于在不同色彩空间之间转换的方法.当前,在计算机中有三种常用的色彩空间:灰度,BGR以及HSV(Hue,Saturation,Value). 灰度色彩空间 ...

  3. 14、OpenCV实现图像的空间滤波——图像锐化及边缘检测

    1.图像锐化理论基础 1.锐化的概念 图像锐化的目的是使模糊的图像变得清晰起来,主要用于增强图像的灰度跳变部分,这一点与图像平滑对灰度跳变的抑制正好相反.而且从算子可以看出来,平滑是基于对图像领域的加 ...

  4. Python+OpenCV图像处理(七)—— 滤波与模糊操作

    过滤是信号和图像处理中基本的任务.其目的是根据应用环境的不同,选择性的提取图像中某些认为是重要的信息.过滤可以移除图像中的噪音.提取感兴趣的可视特征.允许图像重采样等等.频域分析将图像分成从低频到高频 ...

  5. 【opencv基础】图像翻转cv::flip详解

    前言 在opencv中cv::flip函数用于图像翻转和镜像变换. 具体调用形式 void cv::flip( cv::InputArray src, // 输入图像 cv::OutputArray ...

  6. opencv—读取一张图片并滤波

    #include <opencv2\opencv.hpp> #include <iostream> #include <string> using namespac ...

  7. 基于Opencv的自适应中值滤波函数selfAdaptiveMedianBlur()

    7.3.3 自适应滤波器 自适应中值滤波器 对于7.3.2节所讨论的中值滤波器,只要脉冲噪声的空间密度不大,性能还是可以的(根据经验需Pa和Pb小于0.2).本节将证明,自适应中值滤波器可以处理更大概 ...

  8. OpenCV 之 图象几何变换

    二维平面中,图像的几何变换有等距.相似.仿射.投影等,如下所示: 1  图象几何变换 1.1  等距变换 等距变换 (Isometric Transformation),是一种二维的刚体变换,可理解为 ...

  9. opencv实现图像邻域均值滤波、中值滤波、高斯滤波

    void CCVMFCView::OnBlurSmooth()//邻域均值滤波 { IplImage* in; in = workImg; IplImage* out = cvCreateImage( ...

随机推荐

  1. Spring MVC Action参数类型 List集合类型(简单案例)

    题目:定义一个员工实体(Employee),实现批量添加员工功能,在表单中可以一次添加多个员工,数据可以不持久化 1,新建一个项目 2, 然后选择Maven框架选择 maven-archetype-w ...

  2. Cas(01)——简介

    Cas的全称是Centeral Authentication Service,是对单点登录SSO(Single Sign On)的一种实现.其由Cas Server和Cas Client两部分组成,C ...

  3. 【c# 学习笔记】委托的使用

    //委托使用的演示 class Program { //1.使用delegate关键字来定义一个委托类型 public delegate void MyDelegate(int para1, int ...

  4. Ubuntu构建LVS+Keepalived高可用负载均衡集群【生产环境部署】

    1.环境说明: 系统版本:Ubuntu 14.04 LVS1物理IP:14.17.64.2   初始接管VIP:14.17.64.13 LVS2物理IP:14.17.64.3   初始接管VIP:14 ...

  5. laravel 小知识点

    分块导出brokerageCharge = DB::table('表名')$brokerageCharge = $brokerageCharge->chunk(100,function($bro ...

  6. 《Fluid Engine Development》 学习笔记3-光滑粒子流体动力学

    用粒子表示流体最热门的方法就是就是光滑粒子流体动力学(Smoothed Particle Hydrodynamics (SPH).) 这种方法模糊了流体的边界,用有限数量的粒子代表流体,该方法的基本思 ...

  7. F2812 DSP程序运行在片内RAM和FLASH的区别

    F2812 DSP程序运行在片内RAM和片内FLASH的区别 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:F2812是带有内部Flash的DSP,与 ...

  8. iframe里访问父级里的方法属性

    window.parent.attributeName;  // 访问属性attributeName是在父级窗口的属性名 window.parent.Func();  // 访问属性Func()是在父 ...

  9. IO-file-06 文件夹的遍历

    /** * 列出下一级 * 1.list():  列出下级名称  String[] list = dir.list(); * 2.listFiles():列出下级File对象 File[] listF ...

  10. JMeter断言介绍

    (1)作用:用于检查测试中得到的响应数据等是否符合预期,用以保证性能测试过程中的数据交互与预期一致 (2)目的:在request的返回层面增加一层判断机制:因为request成功了,并不代表结果一定正 ...