先来  Laplacian()函数

#include<math.h>
#include<opencv2/opencv.hpp>
#include<string.h>
#include<vector>
using namespace cv;
using namespace std;
//
int main()
{
Mat picture, img, cammera, BGm;
VideoCapture capture();
while ()
{
capture >> cammera;
//GaussianBlur(cammera, cammera, Size(2, 3), 0, 0);
Laplacian(cammera, img, -, /*此数字越大,边缘越密集*/);
cvtColor(cammera, BGm, COLOR_RGB2GRAY);
imshow("Original", cammera);
imshow("dealed", img);
imshow("", BGm);
waitKey();
}
return ;
}

之后是Schaar()滤波

    int main()
{
Mat picture, img, cammera, BGm;
VideoCapture capture();
Mat src;
while ()
{
//【0】创建 grad_x 和 grad_y 图片
Mat grad_x, grad_y;
Mat abs_grad_x, abs_grad_y, dst; //【1】载入原始图 capture >> src;
//【2】显示原始图
imshow("【原始图】Scharr滤波器", src); //【3】求 X方向梯度
Scharr(src, grad_x, CV_16S, , , , , BORDER_DEFAULT);
convertScaleAbs(grad_x, abs_grad_x);//图像增强
imshow("【效果图】 X方向Scharr", abs_grad_x); //【4】求Y方向梯度
Scharr(src, grad_y, CV_16S, , , , , BORDER_DEFAULT);
convertScaleAbs(grad_y, abs_grad_y);//图像增强
imshow("【效果图】Y方向Scharr", abs_grad_y); //【5】合并梯度(近似)
addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, , dst); //【6】显示效果图
imshow("【效果图】合并梯度后Scharr", dst); waitKey();
}
return ;
}

接着是综合的例子

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv; Mat g_srcImage, g_srcGrayImage, g_dstImage; //Canny边缘检测相关变量
Mat g_cannyDetectedEdges;
int g_cannyLowThreshold = ;//TrackBar位置参数 //Sobel边缘检测相关变量
Mat g_sobelGradient_X, g_sobelGradient_Y;
Mat g_sobelAbsGradient_X, g_sobelAbsGradient_Y;
int g_sobelKernelSize = ;//TrackBar位置参数 //Scharr滤波器相关变量
Mat g_scharrGradient_X, g_scharrGradient_Y;
Mat g_scharrAbsGradient_X, g_scharrAbsGradient_Y; static void ShowHelpText();
static void on_Canny(int, void*);//Canny边缘检测窗口滚动条的回调函数
static void on_Sobel(int, void*);//Sobel边缘检测窗口滚动条的回调函数
void Scharr();//封装了Scharr边缘检测相关代码的函数 int main(int argc, char** argv)
{
//改变console字体颜色
system("color 2F"); //显示欢迎语
ShowHelpText(); //载入原图
g_srcImage = imread("1.jpg");
if (!g_srcImage.data) { printf("Oh,no,读取srcImage错误~! \n"); return false; } //显示原始图
namedWindow("【原始图】");
imshow("【原始图】", g_srcImage); // 创建与src同类型和大小的矩阵(dst)
g_dstImage.create(g_srcImage.size(), g_srcImage.type()); // 将原图像转换为灰度图像
cvtColor(g_srcImage, g_srcGrayImage, COLOR_BGR2GRAY); // 创建显示窗口
namedWindow("【效果图】Canny边缘检测", WINDOW_AUTOSIZE);
namedWindow("【效果图】Sobel边缘检测", WINDOW_AUTOSIZE); // 创建trackbar
createTrackbar("参数值:", "【效果图】Canny边缘检测", &g_cannyLowThreshold, , on_Canny);
createTrackbar("参数值:", "【效果图】Sobel边缘检测", &g_sobelKernelSize, , on_Sobel); // 调用回调函数
on_Canny(, );
on_Sobel(, ); //调用封装了Scharr边缘检测代码的函数
Scharr(); //轮询获取按键信息,若按下Q,程序退出
while ((char(waitKey()) != 'q')) {} return ;
} static void ShowHelpText()
{
//输出一些帮助信息
printf("\n\n\t运行成功,请调整滚动条观察图像效果~\n\n"
"\t按下“q”键时,程序退出。\n");
}
void on_Canny(int, void*)
{
// 先使用 3x3内核来降噪
blur(g_srcGrayImage, g_cannyDetectedEdges, Size(, )); // 运行我们的Canny算子
Canny(g_cannyDetectedEdges, g_cannyDetectedEdges, g_cannyLowThreshold, g_cannyLowThreshold * , ); //先将g_dstImage内的所有元素设置为0
g_dstImage = Scalar::all(); //使用Canny算子输出的边缘图g_cannyDetectedEdges作为掩码,来将原图g_srcImage拷到目标图g_dstImage中
g_srcImage.copyTo(g_dstImage, g_cannyDetectedEdges); //显示效果图
imshow("【效果图】Canny边缘检测", g_dstImage);
}
void on_Sobel(int, void*)
{
// 求 X方向梯度
Sobel(g_srcImage, g_sobelGradient_X, CV_16S, , , ( * g_sobelKernelSize + ), , , BORDER_DEFAULT);
convertScaleAbs(g_sobelGradient_X, g_sobelAbsGradient_X);//计算绝对值,并将结果转换成8位 // 求Y方向梯度
Sobel(g_srcImage, g_sobelGradient_Y, CV_16S, , , ( * g_sobelKernelSize + ), , , BORDER_DEFAULT);
convertScaleAbs(g_sobelGradient_Y, g_sobelAbsGradient_Y);//计算绝对值,并将结果转换成8位 // 合并梯度
addWeighted(g_sobelAbsGradient_X, 0.5, g_sobelAbsGradient_Y, 0.5, , g_dstImage); //显示效果图
imshow("【效果图】Sobel边缘检测", g_dstImage); } void Scharr()
{
// 求 X方向梯度
Scharr(g_srcImage, g_scharrGradient_X, CV_16S, , , , , BORDER_DEFAULT);
convertScaleAbs(g_scharrGradient_X, g_scharrAbsGradient_X);//计算绝对值,并将结果转换成8位 // 求Y方向梯度
Scharr(g_srcImage, g_scharrGradient_Y, CV_16S, , , , , BORDER_DEFAULT);
convertScaleAbs(g_scharrGradient_Y, g_scharrAbsGradient_Y);//计算绝对值,并将结果转换成8位 // 合并梯度
addWeighted(g_scharrAbsGradient_X, 0.5, g_scharrAbsGradient_Y, 0.5, , g_dstImage); //显示效果图
imshow("【效果图】Scharr滤波器", g_dstImage);
}

图像变化之Laplacian()函数 and Schaar()滤波及综合例子的更多相关文章

  1. Win8MetroC#数字图像处理--2.2图像二值化函数

    原文:Win8MetroC#数字图像处理--2.2图像二值化函数 [函数代码] /// <summary> /// Binary process. /// </summary> ...

  2. matlab图像灰度调整——imadjust函数的使用

    在MATLAB中,通过函数imadjust()进行图像灰度的调整,该函数调用格式如下: J=imadjust( I )  对图像I进行灰度调整 J=imadjust( I,[low_in;high_i ...

  3. Flex中如何利用FocusManager类的setFocus函数设置TextInput的焦点的例子

    参考:https://blog.csdn.net/liruizhuang/article/details/5876455 <?xml version="1.0" encodi ...

  4. 调整图像的尺寸 - cvResize() 函数实现

    前言 有时会碰到一张图片太大了,想将它缩小.本文将讲解一个很好用的函数解决这个问题. 图像尺寸调整函数 cvResize() // 图像尺寸调整函数 void Resize ( const CvArr ...

  5. MATLAB:图像裁切(imcrop函数)

    对图像进行裁切可用imcrop函数,实现过程如下: close all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clear all; clc; [A,map]=imread( ...

  6. MATLAB:图像减法运算(imsubtract函数)

    图像减法运行涉及到imsubtract函数 实现代码如下: clear all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clc close all; A=imread('ca ...

  7. 图像添加logo水印函数

    <?php //图像添加水印函数 /** *为一张图片添加上一个logo水印(以保存新图片的方式实现) *@param string $picname 被缩放的处理图片源 *@param int ...

  8. magnify.m —— 图像局部放大镜工具函数

    magnify.m 函数下载地址:magnify - File Exchange - MATLAB Central: magnify.m 函数在执行时,是一种交互式处理. 简单演示如下: clear, ...

  9. opencv-python图像二值化函数cv2.threshold函数详解及参数cv2.THRESH_OTSU使用

    cv2.threshold()函数的作用是将一幅灰度图二值化,基本用法如下: #ret:暂时就认为是设定的thresh阈值,mask:二值化的图像 ret,mask = cv2.threshold(i ...

随机推荐

  1. 【概率DP】$P2059$ 卡牌游戏

    链接 题目描述 N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字为X,则庄家 ...

  2. 如何把Eclipse项目迁移到AndroidStudio(如何把项目导入安卓)--这我很困惑

    学习android对我来说,就是兴趣,所以我以自己的兴趣写出的文章,希望各位多多支持!多多点赞,评论讨论加关注. 大佬必备功能. 把Eclipse项目迁移到AndroidStudio 现在就叫你如何把 ...

  3. linux高性能服务器编程 (九) --I/O复用

    第九章 I/O复用 I/O复用就是一个线程可以同时监听多个文件描述符,提高程序性能.虽然I/O复用可以同时监听多个文件描述符,但是它本身是阻塞的,如果多个文件描述符准备就绪,如果不采取措施它仍然是串行 ...

  4. 使用mapreduce清洗简单日志文件并导入hive数据库

    Result文件数据说明: Ip:106.39.41.166,(城市) Date:10/Nov/2016:00:01:02 +0800,(日期) Day:10,(天数) Traffic: 54 ,(流 ...

  5. ubuntu笔记2-误删dpkg的/var/lib/dpkg/info文件夹

    由于误删了dpkg的/var/lib/dpkg/info文件夹,导致安装文件的时候报错 错误提示:E: Sub-process /usr/bin/dpkg returned an error code ...

  6. java并发编程(八) CAS & Unsafe & atomic

    参考文档:https://www.cnblogs.com/xrq730/p/4976007.html CAS(Compare and Swap) 一个CAS方法包含三个参数CAS(V,E,N).V表示 ...

  7. BootStrap-select组件

    正文 前言:之前分享过两篇bootstrap下拉框的组件:JS组件系列——两种bootstrap multiselect组件大比拼  和 JS组件系列——Bootstrap Select2组件使用小结 ...

  8. Guava Cache 参数配置说明

    系统中用到了了Guava Cache: private DriverInfoServiceImpl(DriverClientProxy driverClientProxy) { this.driver ...

  9. Spring中为什么继承了ApplicationContextAware接口就可以使用ApplicationContext对象?

    1.Spring中使用applicationContext对象 public class SpringContextUtil implements ApplicationContextAware { ...

  10. mestasploit笔记 :MS17-010

    实验环境 操作机 :Kali 2017 操作机IP:172.16.11.2 目标机:Windows 7 目标机IP:172.16.12.2 实验目的 认知Windows远程溢出漏洞的危害 知悉MS17 ...