先来  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. 洛谷 P1621 集合

    目录 题目 思路 \(Code\) 题目 P1621 集合 思路 并查集+埃氏筛,一开始连通块的个数是\(b-a+1\)个,在筛素数的过程中只要当前素数大于\(p\)就对该素数筛出来的数进行判断,如果 ...

  2. string类的用法总结

    string中常见的成员函数 示例代码: string s= string("abcdefg"); char ch[] = "abcdefgd"; //调用构造 ...

  3. JS中的浅拷贝与深拷贝

    浅拷贝与深拷贝的区别: 浅拷贝: 对基本类型和引用类型只进行值的拷贝,即,拷贝引用对象的时候,只对引用对象的内存地址拷贝,新旧引用属性指向同一个对象,修改任意一个都会影响所有引用当前对象的变量. 深拷 ...

  4. WIFI万能钥匙面试引出上线注意事项

    WEB应用上线程序员注意事项: 单元测试 前后端联调 界面和用户体验 DEBUG 性能 SEO 安全性

  5. 原创:Kmeans算法实战+改进(java实现)

    kmeans算法的流程:   EM思想很伟大,在处理含有隐式变量的机器学习算法中很有用.聚类算法包括kmeans,高斯混合聚类,快速迭代聚类等等,都离不开EM思想.在了解kmeans算法之前,有必要详 ...

  6. lastal

    http://last.cbrc.jp/doc/lastal.html This program finds local alignments between query sequences, and ...

  7. 【Beta】Scrum meeting 10

    目录 写在前面 进度情况 任务进度表 Beta-1阶段燃尽图 遇到的困难 照片 commit记录截图 后端代码 前端代码 技术博客 写在前面 例会时间:5.14 22:30-22:45 例会地点:微信 ...

  8. C++的static_cast、dynamic_cast和const_cast用法

    static_cast.dynamic_cast和const_cast static_cast: ​ 用法: static_cast < type-id > (expression) ​ ...

  9. mysql/mongodb监控之Percona Monitoring and Management (PMM) 2.1.0安装使用

    Percona Monitoring and Management (PMM)是Percona Server一款开源的用于管理和监控MySQL和MongoDB性能的开源平台,通过PMM客户端收集到的D ...

  10. SyntaxError: expected expression, got ")" void() : 1: 5

    这个错误的意思是: 本来希望得到 一个 表达式, 缺得到了 ), 凡是 这样的错误, 就是 函数 在当前位置, 需要一个参数! 参数没有给, 就 输入 ) 右括号了! 错误位置 1: 5, 就是 指 ...