opencv3/C++图像边缘提取方式

canny算子实现

使用track bar 调整canny算子参数,提取到合适的图像边缘。

#include<iostream>
#include<opencv2/opencv.hpp>
using namespace cv;

void trackBar(int, void*);
int s1=0,s2=0;
Mat src, dst;
int main()
{
 src = imread("E:/image/image/daibola.jpg");
 if(src.empty())
 {
  printf("can not load image \n");
  return -1;
 }
 cvNamedWindow("input", CV_WINDOW_AUTOSIZE);
 imshow("input", src);
 dst = src.clone();
 cvNamedWindow("output", CV_WINDOW_AUTOSIZE);
 createTrackbar("canny1", "output", &s1, 255, trackBar);
 createTrackbar("canny2", "output", &s2, 255, trackBar);
 GaussianBlur(src,src,Size(3,3),0);

 waitKey();
 return 0;
}

void trackBar(int, void*)
{

 Canny(src,dst,s1,s2,3);
 imshow("output", dst);
}

Sobel算子实现

#include<iostream>
#include<opencv2/opencv.hpp>
using namespace cv;

int main()
{
 Mat src, dst;
 src = imread("E:/image/image/daibola.jpg");

 if(src.empty())
 {
  printf("can not load image \n");
  return -1;
 }
 dst = Mat::zeros(src.size(), src.type());
 cvNamedWindow("input", CV_WINDOW_AUTOSIZE);
 imshow("input", src); 

 Mat kernel = (Mat_<int>(2,2)<<0,1,-1,0);
 filter2D(src,dst,-1,kernel,Point(-1,-1),0.0);
 Mat xgrad, ygrad;
 Sobel(src,xgrad,CV_16S,1,0,3);
 Sobel(src,ygrad,CV_16S,0,1,3);
 convertScaleAbs(xgrad,xgrad);
 convertScaleAbs(ygrad,ygrad);

 addWeighted(xgrad,0.5,ygrad,0.5,0,dst);
 //addWeighted(dst,0.5,src,1,0,dst);
 cvNamedWindow("output", CV_WINDOW_AUTOSIZE);
 imshow("output", dst);
 waitKey();
 return 0;
}

以上这篇opencv3/C++图像边缘提取方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现opencv提取直线、轮廓及ROI实例详解

    一.Canny检测轮廓 在上一篇文章中有提到sobel边缘检测,并重写了soble的C++代码让其与matlab中算法效果一致,而soble边缘检测是基于单一阈值的,我们不能兼顾到低阈值的丰富边缘和高阈值时的边缘缺失这两个问题.而canny算子则很好的弥补了这一不足,从目前看来,canny边缘检测在做图像轮廓提取方面是最优秀的边缘检测算法. canny边缘检测采用双阈值值法,高阈值用来检测图像中重要的.显著的线条.轮廓等,而低阈值用来保证不丢失细节部分,低阈值检测出来的边缘更丰富,但是很多边缘并

  • Opencv提取连通区域轮廓的方法

    本文实例为大家分享了Opencv提取连通区域轮廓的具体代码,供大家参考,具体内容如下 在进行图像分割后,可能需要对感兴趣的目标区域进行提取,比较常用的方法是计算轮廓. 通过轮廓可以获得目标的一些信息: (1)目标位置 (2)目标大小(即面积) (3)目标形状(轮廓矩) 当然,轮廓不一定代表希望目标区域,阈值分割时可能造成一部分信息丢失,因此可以计算轮廓的质心坐标,再进行漫水填充. 程序中有寻找质心+填充,但效果不好,因此就不放填充后的图了. 实验结果: #include "opencv2/img

  • opencv3/C++图像边缘提取方式

    canny算子实现 使用track bar 调整canny算子参数,提取到合适的图像边缘. #include<iostream> #include<opencv2/opencv.hpp> using namespace cv; void trackBar(int, void*); int s1=0,s2=0; Mat src, dst; int main() { src = imread("E:/image/image/daibola.jpg"); if(src

  • opencv3/C++图像滤波实现方式

    图像滤波在opencv中可以有多种实现形式 自定义滤波 如使用3×3的掩模: 对图像进行处理. 使用函数filter2D()实现 #include<opencv2/opencv.hpp> using namespace cv; int main() { //函数调用filter2D功能 Mat src,dst; src = imread("E:/image/image/daibola.jpg"); if(!src.data) { printf("can not l

  • opencv3/C++图像像素操作详解

    RGB图像转灰度图 RGB图像转换为灰度图时通常使用: 进行转换,以下尝试通过其他对图像像素操作的方式将RGB图像转换为灰度图像. #include<opencv2/opencv.hpp> #include<math.h> using namespace cv; int main() { //像素操作 Mat src,dst; src = imread("E:/image/image/daibola.jpg"); if(src.empty()) { printf

  • opencv3/C++ HOG特征提取方式

    HOG特征 HOG(Histograms of Oriented Gradients)梯度方向直方图 通过利用梯度信息能反映图像目标的边缘信息并通过局部梯度的大小将图像局部的外观和形状特征化.在论文Histograms of Oriented Gradients for Human Detection中被提出. HOG特征的提取过程为: Gamma归一化: 计算梯度: 划分cell 组合成block,统计block直方图: 梯度直方图归一化: 收集HOG特征. Gamma归一化: 对图像颜色进行

  • keras 读取多标签图像数据方式

    我所接触的多标签数据,主要包括两类: 1.一张图片属于多个标签,比如,data:一件蓝色的上衣图片.jpg,label:蓝色,上衣.其中label包括两类标签,label1第一类:上衣,裤子,外套.label2第二类,蓝色,黑色,红色.这样两个输出label1,label2都是是分类,我们可以直接把label1和label2整合为一个label,直接编码,比如[蓝色,上衣]编码为[011011].这样模型的输出也只需要一个输出.实现了多分类. 2.一张图片属于多个标签,但是几个标签不全是分类.比

  • Python OpenCV 基于图像边缘提取的轮廓发现函数

    基础知识铺垫 在图像中,轮廓可以简单的理解为连接具有相同颜色的所有连续点(边界)的曲线,轮廓可用于形状分析和对象检测.识别等领域. 轮廓发现的原理:先通过阈值分割提取目标物体,再通过边缘检测提取目标物体轮廓. 一个轮廓就是一系列的点(像素),这些点构成了一个有序的点集合. 使用 cv2.findContours 函数可以用来检测图像的边缘. 函数原型说明 contours, hierarchy = cv2.findContours(image, mode, method[, contours[,

  • python通过robert、sobel、Laplace算子实现图像边缘提取详解

    实现思路: 1,将传进来的图片矩阵用算子进行卷积求和(卷积和取绝对值) 2,用新的矩阵(与原图一样大小)去接收每次的卷积和的值 3,卷积图片所有的像素点后,把新的矩阵数据类型转化为uint8 注意: 必须对求得的卷积和的值求绝对值:矩阵数据类型进行转化. 完整代码: import cv2 import numpy as np # robert 算子[[-1,-1],[1,1]] def robert_suanzi(img): r, c = img.shape r_sunnzi = [[-1,-1

  • 基于python读取图像的几种方式汇总

    目录 本文介绍几种基于python的图像读取方式: 基于PIL库的图像读取.保存和显示 基于matplotlib的图像读取.显示和保存 基于scikit-image的图像读取.保存和显示 基于imageio的图像读取.显示和保存 总结 本文介绍几种基于python的图像读取方式: 基于PIL库的图像读取.保存和显示 基于opencv-python的图像读取.保存和显示 基于matplotlib的图像读取.保存和显示 基于scikit-image的图像读取.保存和显示 基于imageio的图像读取

  • Python图像锐化与边缘检测之Scharr,Canny,LOG算子详解

    目录 一.Scharr算子 二.Cann算子 三.LOG算子 四.总结 一.Scharr算子 由于Sobel算子在计算相对较小的核的时候,其近似计算导数的精度比较低,比如一个3×3的Sobel算子,当梯度角度接近水平或垂直方向时,其不精确性就越发明显.Scharr算子同Sobel算子的速度一样快,但是准确率更高,尤其是计算较小核的情景,所以利用3×3滤波器实现图像边缘提取更推荐使用Scharr算子. Scharr算子又称为Scharr滤波器,也是计算x或y方向上的图像差分,在OpenCV中主要是

  • PowerShell小技巧之定时抓取屏幕图像

    昨天的博文写了定时记录操作系统行为,其实说白了就是抓取了击键的记录和对应窗口的标题栏,而很多应用程序标题栏又包含当时记录的文件路径和文件名,用这种方式可以大致记录操作了哪些程序,打开了哪些文件,以及敲击了哪些按键.事实上这样记录操作系统的行为显得相对单薄一点,因为记录的内容不太形象,对于新手来说太过于隐晦了,对于人类来说,图像会比文字更加有利于用户理解.当操作系统不方便装屏幕记录软件,但又需要看已经登录用户在干什么的时候,用PowerShell的脚本来实现定时抓取图像的方式记录操作,查看图像就知

随机推荐