先来  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 491. Increasing Subsequences

    原题链接在这里:https://leetcode.com/problems/increasing-subsequences/ 题目: Given an integer array, your task ...

  2. 在WinDbg中显示和搜索std::map内容

    我们希望在WinDbg中自动显示.搜索和过滤std::map对象.std::vectors的脚本相对简单,因为vectors中数据的平面结构:map是更复杂的野兽.具体地说,Visual C++ ST ...

  3. Cronicle 基于nodejs 的分布式任务调度工具

    Cronicle 是一款不多的分布式任务调度工具,基于nodejs 开发,同时包含看web UI,从官方介绍看到的UI还是 挺不错的,而且功能很丰富,值得试用下 参考资料 http://cronicl ...

  4. A1102 | 反转二叉树

    #include <stdio.h> #include <memory.h> #include <math.h> #include <string> # ...

  5. Sublime Text 3关闭自动升级提醒

    由于种种原因,导致不想升级现有版本的ST3,但是被它的升级提醒弹窗严重骚扰! ||||||||||| 解 决 办 法 ||||||||||| 1.首选项 - 设置 - 用户(快捷键 ❀,)打开“Pre ...

  6. 代码审计和动态测试——BUUCTF - 高明的黑客

    根据题目提示,访问http://2ea746a2-0ecd-449b-896b-e0fb38956134.node1.buuoj.cn/www.tar.gz下载源码 解压之后发现有3002个php文件 ...

  7. 将jar包导入maven本地仓库

    https://blog.csdn.net/lvdaan/article/details/79760976 一.首先配置环境变量 在path 中添加 maven的bin 的路径 例如:D:\soft\ ...

  8. Segment fault 常见原因

    [https://blog.csdn.net/qq_22238021/article/details/79872978] 本质原因在于:程序访问了非法的地址 1.引用空指针 2.野指针 3.访问越界 ...

  9. poi导出word表格跨行

    DataCommon.java package com.ksource.pwlp.model.statistic; public class DataCommon { private Long id; ...

  10. MLflow系列3:MLflow项目

    英文链接:https://mlflow.org/docs/latest/projects.html 本文链接:https://www.cnblogs.com/CheeseZH/p/11945432.h ...