先来  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. leetcode 合并重叠区间变异 合并多个时间段 取并集

    public class Solution { public static ArrayList<Interval> merge(ArrayList<Interval> inte ...

  2. blessed-contrib 开发终端dashboard 的几点说明

    以前有说过blessed-contrib 这个很不错的终端dashboard 开发框架,以下是使用中的一些问题 中文编码 模式是不支持中文编码的,但是 我们可以在初始化的时候指定unicode编码 s ...

  3. 洛谷P4170 [CQOI2007]涂色题解

    废话: 这个题我第一眼看就是贪心呐, 可能是我之前那做过一道类似的题这俩题都是关于染色的 现在由于我帅气无比的学长的指导, 我已经豁然开朗, 这题贪心不对啊, 当时感觉自己好厉害贪心都能想出来 差点就 ...

  4. hbase基础知识一

    1. hbase是什么 漫画学习hbase----最易懂的Hbase架构原理解析 http://developer.51cto.com/art/201904/595698.htm 1.1 hbase的 ...

  5. nginx 访问控制之 user_agent

    user_agent大家并不陌生,可以简单理解成浏览器标识,包括一些蜘蛛爬虫都可以通过user_agent来辨识. 通过访问日志,可以发现一些搜索引擎的蜘蛛对网站访问特别频繁,它们并不友好. 为了减少 ...

  6. Python并发请求之requests_future模块使用

    # -*- coding: utf-8 -*- # @Time : 2019-12-09 10:00 # @Author : cxa # @File : demo.py # @Software: Py ...

  7. 强烈建议为你的Android项目加上 largeHeap 属性

    小内存机器使用“微信”时,看视频经常崩溃(out of memory) ,小内存机器有时候明明内存还很多,却还是抛出“内存不够”,应该就是每个APP能用“堆大小”的限制. 如上图,Android项目的 ...

  8. Spring Boot使用Html

    1.引入模板thymeleaf <dependency> <groupId>org.springframework.boot</groupId> <artif ...

  9. 配置Zuul代理下游的认证

    配置Zuul代理下游的认证 您可以通过proxy.auth.*设置控制@EnableZuulProxy下游的授权行为.例: application.yml proxy: auth: routes: c ...

  10. 浅析String.intern()方法

    1.String类型“==”比较样例代码如下:package com.luna.test;public class StringTest { public static void main(Strin ...