美文网首页
Scharr(边缘提取)

Scharr(边缘提取)

作者: itfitness | 来源:发表于2019-08-08 11:50 被阅读0次

概念

这个是OpenCV对于Sobel算子的强化,能够提取出一些微小的细节。

效果图对比

●源图像



●处理后图像


函数讲解

●函数原型
○c++

void Scharr( InputArray src, OutputArray dst, int ddepth,
                          int dx, int dy, double scale = 1, double delta = 0,
                          int borderType = BORDER_DEFAULT )

○Android

void Scharr(Mat src, Mat dst, int ddepth, int dx, int dy, double scale, double delta, int borderType)

●参数解释
○src:源图像Mat对象
○dst:目标图像Mat对象
○ddepth:图像的深度,可以为-1、CV_16S、CV_32F、CV_64F
○dx:int类型的,表示x方向的差分阶数,1或0 。
○dy:int类型的,表示y方向的差分阶数,1或0 。
○scale:Double类型的,计算可选比例因子,默认值1 。
○delta:加到输出像素的值,默认为0 。
○borderType:边界类型,默认值BORDER_DEFAULT。

函数使用

●c++中

#include<opencv2/opencv.hpp>
using namespace cv;
int main() {
    Mat src = imread("C:/Users/Administrator/Desktop/ic_test.jpg");//引入源图像
    if (src.empty()) {
        return -1;
    }
    imshow("src",src);//展示源图像       
    cvtColor(src, src, CV_BGR2GRAY);//将图像转换为灰度图像
    imshow("gray", src);//展示灰度图像
    Mat scharrX,scharrY, dst;
    Scharr(src,scharrX,-1,1,0,3);//提取X方向的边缘
    Scharr(src, scharrY, -1, 0, 1, 3);//提取Y方向的边缘
    imshow("scharrX",scharrX);//展示X方向的边缘
    imshow("scharrY", scharrY);//展示Y方向的边缘
    add(scharrX,scharrY,dst);//将XY方向提取的边缘合并到一起
    imshow("dst", dst);//展示最终结果
    waitKey(0);
    return 0;
}

●Android中

Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.ic_relief);
Mat src = new Mat();
Mat dst = new Mat();
Mat scharrX = new Mat();
Mat scharrY = new Mat();
Utils.bitmapToMat(bitmap,src);//将Bitmap对象转换为Mat对象
Imgproc.cvtColor(src,src,Imgproc.COLOR_RGBA2GRAY);//将图像转换为灰度图像
Imgproc.Scharr(src,scharrX, -1,1,1);//提取X方向的边缘
Imgproc.Scharr(src,scharrY, -1,0,1);//提取Y方向的边缘
Core.add(scharrX,scharrY,dst);//将XY方向提取的边缘合并到一起
//dst.convertTo(dst,CvType.CV_8UC1);//注意如果上面的ddepth参数填写了其他类型如CV_16S则需要此操作将类型转换为CV_8UC1或者CV_8UC3或CV_8UC4才能转换为Bitmap
Utils.matToBitmap(dst,bitmap);//将Mat对象转换为Bitmap对象

相关文章

  • Scharr(边缘提取)

    概念 这个是OpenCV对于Sobel算子的强化,能够提取出一些微小的细节。 效果图对比 ●源图像 ●处理后图像 ...

  • opencv+python学习记录(二十)边缘检测

    边缘检测包含:Prewitt边缘检测、Sobel边缘检测、Scharr算子、Canny边缘检测、Laplacian...

  • Scharr(iOS)滤波器(边缘检测)

    我们一般直接称scharr为滤波器,而不是算子 计算图像差分:Scharr()函数 void Scharr( In...

  • Canny(边缘提取)

    概念 Canny函数内部使用canny算法对输入图像进行边缘检测。 效果图对比 ●源图像 ●处理后图像 函数讲解 ...

  • Sobel(边缘提取)

    概念 Sobel算子 效果图对比 ●源图像 ●处理后图像 函数讲解 ●函数原型○c++ ○Android ●参数解...

  • Laplacian(边缘提取)

    概念 在二阶微分的时候,最大变化处的值为零即边缘是零值,通过二阶导数计算,依据理论我们可以计算出图像二阶导数,提取...

  • 20、轮廓发现

    轮廓填充 基于Canny边缘提取

  • 轮廓发现

    轮廓发现   轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法,所以边缘提取的阈值选定会影响最终轮廓发现结果。相...

  • opencv+python -- 轮廓发现

    轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法,所以边缘提取的阈值选定会影响最终轮廓发现结果 Code 运行结...

  • 028-Opencv笔记-轮廓发现

    轮廓发现 轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法。所以边缘提取的阈值选定会影响最终轮廓发现结果API介...

网友评论

      本文标题:Scharr(边缘提取)

      本文链接:https://www.haomeiwen.com/subject/psatjctx.html