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. Flutter常用命令和mac电脑常用命令

    0.  flutter create example_demo  新建flutter项目 1.flutter packages get  安装新增的包 2.flutter run 运行flutter项 ...

  2. WPF窗体应用程序开发

    1.Window:登录窗口.主窗体.消息框 2.UserControl:业务界面.消息框(如果使用UC来实现,则需要做特殊的处理,比如中断功能如何处理?)(显示一个UC,必须将其添加到容器中,所以&l ...

  3. Oracle系统表整理+常用SQL语句收集(转载)

    原文:https://www.cnblogs.com/jiangxinnju/p/5840420.html-- DBA/ALL/USER/V_$/GV_$/SESSION/INDEX开头的绝大部分都是 ...

  4. 【Leetcode_easy】824. Goat Latin

    problem 824. Goat Latin solution class Solution { public: string toGoatLatin(string S) { unordered_s ...

  5. Kingbase数据库web统一管理平台

    1.安装Kingbase金仓数据库后,通过打开web管理平台,可以方便的进行远程维护.      示例地址:https://192.168.0.1:54328/webstudio 2.输入用户名密码登 ...

  6. Moq中判断方法是否被执行时,参数中有列表的情况

    如果参数中有列表,列表项为引用类型时,则会判断列表项是否为同一引用 列表本身不判断

  7. 欧姆龙 EntherNet/IP(CIP报文格式)

    Enthip/IP_ CIP报文格式 测试Demo在文章末尾 注册请求帧: 0x65 0x00   注册请求命令 2byte 0x04,0x00   header长度2byte   < 封装头& ...

  8. 最新 吉比特java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.吉比特等10家互联网公司的校招Offer,因为某些自身原因最终选择了吉比特.6.7月主要是做系统复习.项目复盘.LeetCo ...

  9. FromServices回来

    FromServices回来 起因 这两天,我忽然有点怀念 Asp.NET MVC 5 之前的时代,原因是我看到项目里面有这么一段代码(其实不止一段,几乎每个 Controller 都是) [Rout ...

  10. Jmeter逻辑控制器: If控制器的解读

    Jmeter官网其实有很详细的文档,点此跳转到官网,下面我来解读一下官网的文档,如有错误,欢迎指出. 一.官网解读 Name 在结果树中显示的名字. Comments 备注.相当于代码中的注释. Ex ...