日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Android OpenCV 边缘检测 Canny 的使用

發(fā)布時間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android OpenCV 边缘检测 Canny 的使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

先看下實現(xiàn)的效果圖

下面看下代碼使用

Canny(Mat image, Mat edges, double threshold1, double threshold2, int apertureSize, boolean L2gradient)

?@param image 8-bit input image.
* @param edges output edge map; single channels 8-bit image, which has the same size as image .
* @param threshold1 first threshold for the hysteresis procedure.
* @param threshold2 second threshold for the hysteresis procedure.
* @param apertureSize aperture size for the Sobel operator.
* @param L2gradient a flag, indicating whether a more accurate \(L_2\) norm
* \(=\sqrt{(dI/dx)^2 + (dI/dy)^2}\) should be used to calculate the image gradient magnitude (
* L2gradient=true ), or whether the default \(L_1\) norm \(=|dI/dx|+|dI/dy|\) is enough (
* L2gradient=false )
第???????一個參數(shù)image:輸入圖像,單通道8位圖像
第二個參數(shù)edges:輸出邊緣圖像,需要和原圖像有一樣尺寸和類型
第三個參數(shù)threshold1:第一個滯后性閾值
第四個參數(shù)threshold2:第二個滯后性閾值 這個數(shù)值越大輪廓越少,
第五個參數(shù)apertureSize:表示應用sobel算子的孔徑大小其有默認值3
第六個參數(shù)L2gradient:bool類型的L2gradient,一個計算圖像梯度幅值的標識閾值1和閾值2中較小的用于邊緣的連接,較大的用于控制強邊緣的初始段。高低閾值比在2:1和3:1之間時最佳的

?

public class CanneyActivity extends AppCompatActivity {private ImageView imageView;private Bitmap bitmap;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.canney_activity_layout);imageView = findViewById(R.id.img);bitmap = ((BitmapDrawable) getResources().getDrawable(R.mipmap.photo)).getBitmap();imageView.setImageBitmap(bitmap);findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Bitmap canneyBitmap = toCanneyByOpencv(bitmap);imageView.setImageBitmap(canneyBitmap);}});}private Bitmap toCanneyByOpencv(Bitmap bitmap) {Mat mat = new Mat();Utils.bitmapToMat(bitmap, mat);Mat gray= new Mat();// 轉灰度圖片
//        Imgproc.cvtColor(mat, gray, Imgproc.COLOR_BGR2GRAY);// 使用3x3的內(nèi)核來降噪
//        Imgproc.blur(mat, gray, new Size(3,3));// 高斯降噪
//        Imgproc.GaussianBlur(mat, gray, new Size(3,3),5,5);//3 描繪邊緣Imgproc.Canny(mat, gray, 50, 200, 3, false);Utils.matToBitmap(gray, bitmap);return bitmap;}@Overrideprotected void onResume() {super.onResume();OpenCVLoader.initDebug();}}

xml 代碼

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><ImageViewandroid:id="@+id/img"android:layout_width="wrap_content"android:layout_height="wrap_content"android:scaleType="fitXY" /><Buttonandroid:id="@+id/btn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="邊緣檢測"/></LinearLayout>

可以修改threshold2 查看輪廓

public class CanneyActivity extends AppCompatActivity {private ImageView imageView;private Bitmap bitmap;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.canney_activity_layout);imageView = findViewById(R.id.img);bitmap = ((BitmapDrawable) getResources().getDrawable(R.mipmap.photo)).getBitmap();imageView.setImageBitmap(bitmap);findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Bitmap canneyBitmap = toCanneyByOpencv(bitmap);imageView.setImageBitmap(canneyBitmap);}});}private Bitmap toCanneyByOpencv(Bitmap bitmap) {Mat mat = new Mat();Utils.bitmapToMat(bitmap, mat);Mat gray= new Mat();// 轉灰度圖片
//        Imgproc.cvtColor(mat, gray, Imgproc.COLOR_BGR2GRAY);// 使用3x3的內(nèi)核來降噪
//        Imgproc.blur(mat, gray, new Size(3,3));// 高斯降噪
//        Imgproc.GaussianBlur(mat, gray, new Size(3,3),5,5);//3 描繪邊緣Imgproc.Canny(mat, gray, 3, 3, 3, false);Utils.matToBitmap(gray, bitmap);return bitmap;}@Overrideprotected void onResume() {super.onResume();OpenCVLoader.initDebug();}}

這個時候在看下效果圖如下

?

總結

以上是生活随笔為你收集整理的Android OpenCV 边缘检测 Canny 的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。