存在一个问题,sobel边缘检测 就是用sobel卷积核 卷积图像,但是因为卷积核中的参数有些是负数,若是卷积后的值是负数该怎么解释,望大佬看见提点一下我。

#include<opencv2/opencv.hpp>
#include<iostream>
#include<stdlib.h>using namespace cv;
using namespace std;Mat Padding(Mat& image,int padNum = 1) {Mat dst = Mat::zeros(image.size[0]+2*padNum, image.size[1] + 2*padNum, CV_8UC1);for (int i = 0; i < image.rows; i++) {for (int j = 0; j < image.cols; j++){dst.at<uchar>(i + 1, j + 1) = image.at<uchar>(i, j);}}return  dst;}Mat  convolution(Mat &image, Mat &kernal) {Mat dst = Mat ::zeros(image.size(),image.type());// padding 填充Mat test = Padding(image);// 6*6 填充一层 变 8*8double pixSum = 0;for (int i = 0; i < image.rows; i++) {for (int j = 0; j < image.cols; j++){//这个像素就在卷积核的中心处for (int k = 0; k < kernal.rows; k++) {for (int l = 0; l < kernal.cols; l++) {pixSum += kernal.at<double>(k, l) * double(test.at<uchar>(k + i, l + j));}}//if (pixSum < 0) { pixSum = 0; }dst.at<uchar>(i, j) = abs(pixSum);pixSum = 0;}}return dst;}Mat gradientImg(Mat image) {Mat test = Mat:: ones(Size(6, 6), CV_8UC1);Mat kernal_x = (Mat_<double>(3, 3) << -1, 0, 1, -2, 0, 2, -1, 0, 1);Mat dst = convolution(test, kernal_x);;dst = convolution(image, kernal_x);return dst;}int main(int argc, char* argv[])
{//load picsstring imgPath = "E:\\研究生\\数字图像处理\\c++\\字符识别\\Project1\\lena.png";Mat srcImg = imread(imgPath,0);//RGB,JPG,PNG,TIFF格式,灰度格式读入if (srcImg.empty()) {cout << "can't load pic" << endl;exit(-1);}//show pics//imshow("src",srcImg);Mat gradient= gradientImg(srcImg);imshow("gradient x ", gradient);//与opencv 对比Mat gx;Sobel(srcImg, gx, CV_16S, 1, 0);convertScaleAbs(gx, gx);imshow("opencv x ", gx);waitKey(0);//wait functiondestroyAllWindows();return 0;
}

对x 方向的sobel 滤波操作效果有一些差别

感觉就是上面的卷积的时候,出现负数时直接求绝对值的操作有关。

sobel 边缘检测 c++实现相关推荐

  1. FPGA设计——图像处理(Sobel边缘检测)

    1. 概述 本设计采用FPGA技术,实现CMOS视频图像的边缘检测(sobel),并通过以太网传输(UDP方式)给PC实时显示. 2. 硬件系统框图 CMOS采用MT9V011(30万像素),FPGA ...

  2. ITK:Sobel边缘检测图像滤镜

    ITK:Sobel边缘检测图像滤镜 内容提要 输出结果 输入 输出 C++实现代码 内容提要 将SobelEdgeDetectionImageFilter应用于图像 输出结果 输入 输出 C++实现代 ...

  3. Sobel边缘检测算法verilog实现及仿真

    实验verilog语言对sobel边缘检测算法进行设计 实验modelsim仿真工具进行仿真,程序和仿真截图如下图所示: 1.程序截图: 2.仿真截图: module edge_judge ( clk ...

  4. opencv:卷积涉及的基础概念,Sobel边缘检测代码实现及卷积填充模式

    具体参考我的另一篇文章: opencv:卷积涉及的基础概念,Sobel边缘检测代码实现及Same(相同)填充与Vaild(有效)填充 这里是对这一篇文章的补充! 卷积-三种填充模式 橙色部分为imag ...

  5. opencv:卷积涉及的基础概念,Sobel边缘检测代码实现及Same(相同)填充与Vaild(有效)填充

    滤波 线性滤波可以说是图像处理最基本的方法,它可以允许我们对图像进行处理,产生很多不同的效果. 卷积 卷积的概念: 卷积的原理与滤波类似.但是卷积却有着细小的差别. 卷积操作也是卷积核与图像对应位置的 ...

  6. 基于MATLAB的Sobel边缘检测算法实现

    图像边缘就是图像灰度值突变的地方,也就是图像在该部分的像素值变化速度非常之快,就比如在坐标轴上一条曲线有刚开始的平滑突然来个大转弯,在变化出的导数非常大. Sobel算子主要用作边缘检测,它是一离散型 ...

  7. Sobel边缘检测算法及OpenCV函数实现

    转自https://www.cnblogs.com/herenzhiming/articles/6526741.html  https://blog.csdn.net/qaz_wz/article/d ...

  8. CUDA:实现Sobel边缘检测滤波器的实例

    CUDA:实现Sobel边缘检测滤波器的实例 FunctionPointers_kernels.h FunctionPointers.cpp FunctionPointers_kernels.cu F ...

  9. Matlab与FPGA图像处理系列——基于FPGA的实时边缘检测系统设计,sobel边缘检测流水线实现

    注:下载链接的资源是图片存 ROM 后读取进行 Sobel 检测显示在 VGA上,可供参考. 摘要:本文设计了一种基于 FPGA 的实时边缘检测系统,使用OV5640 摄像头模块获取实时的视频图像数据 ...

  10. OpenCV Sobel 边缘检测

    Sobel算子检测方法对灰度渐变和噪声较多的图像处理效果较好,sobel算子对边缘定位不是很准确,图像的边缘不止一个像素:当对精度要求不是很高时,是一种较为常用的边缘检测方法. OpenCV中sobe ...

最新文章

  1. U^2-Net跨界肖像画,完美复刻人物细节,GitHub标星2.5K+
  2. 在ElasticSearch之下(图解搜索的故事)
  3. Python操作excel文件创建workbook和批量创建Sheet
  4. https://blog.csdn.net/nameofcsdn/article/details/53164652
  5. 芯片,开源,数学,计算机
  6. ajax+webservice
  7. 30秒清除你电脑中的垃圾
  8. 一场暴雨引发的装机日记
  9. 比Everything、listary、DocFetcher还好用的桌面文档搜索软件 - bbdoc
  10. 常用工具软件使用【2】
  11. winrar密码秒破_家用的指纹密码锁好用吗?什么品牌好?
  12. 智能制造怎么精益生产?详解:精益生产与智能制造的融合
  13. 对List中的map的key按中文拼音进行排序。
  14. mac删除global protect
  15. 万能  随机森林回归 补缺函数
  16. 2019计算机三级网络技术答案,2019年计算机三级网络技术精选练习题
  17. Maven压缩资源导致文件损坏的解决
  18. kubernetes Sandbox删除详解
  19. 通过路径图比较BOSS直聘,智联招聘,拉勾的登录功能
  20. IP地址分类及特殊IP地址

热门文章

  1. flutter-谷歌移动UI框架
  2. java 邮件接收,用Java接收电子邮件
  3. 软件无线电原理深入解析
  4. MSM8937的sbl1和CDT
  5. Paraview使用指南
  6. 基于udp的服务器消息转发(群发)
  7. UART协议TTL电平接口高性能低功耗SI4463无线透传通信模块
  8. 类编程的WAF(下)
  9. cpu真假有没有装机测试软件,有了她装机被骗很难 实用电脑检测软件推荐
  10. Xshell6与Xftp6教育版下载(免费)