最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android?OpenCV基礎(chǔ)API清晰度亮度識別檢測

 更新時間:2023年01月18日 11:33:25   作者:小肥羊沖沖沖Android  
這篇文章主要為大家介紹了Android?OpenCV基礎(chǔ)API清晰度亮度識別檢測,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

背景

工作中遇到業(yè)務(wù)訴求是通過OpenCV對圖片進(jìn)行一些判斷操作和優(yōu)化,這里是看了部分不錯的文章,希望總結(jié)一個自己的學(xué)習(xí)過程,溫故而知新,有不對的地方可以評論區(qū)指出,小白學(xué)習(xí)海涵。

基礎(chǔ)知識

Mat在OpenCV中是非常重要的存在,后續(xù)各個API都是在Mat的基礎(chǔ)上去做文章,Mat 是Matrix(矩陣)的縮寫

...
inline
Mat::Mat(int _rows, int _cols, int _type)
    : flags(MAGIC_VAL), dims(0), rows(0), cols(0), data(0), datastart(0), dataend(0),
      datalimit(0), allocator(0), u(0), size(&rows), step(0)
{
    create(_rows, _cols, _type);
}
inline
void Mat::create(int _rows, int _cols, int _type)
{
    _type &= TYPE_MASK;
    if( dims <= 2 && rows == _rows && cols == _cols && type() == _type && data )
        return;
    int sz[] = {_rows, _cols};
    create(2, sz, _type);
}
...

Mat中其實保存著關(guān)于圖片的圖像信息,包括像素、寬、高、類型大小深度等屬性。

主要Api - 加載圖片

由于我這里使用的集團(tuán)的二方庫,讀者大佬可以直接在github搜索 OpenCV對應(yīng)版本,在gradle中添加依賴即可,由于本人是使用的Java代碼通過jni調(diào)用底層C++代碼,大部分api其實是互通的(網(wǎng)上Python教程居多,這也是我想把這個過程總結(jié)下來的原因)

imread

該方法主要是獲取圖片的Mat信息的 默認(rèn)通道為BGR(Blue, Green, Red),可以有很多flags供我們選擇以此達(dá)到不同的效果。

public static Mat imread(String filename, int flags) {
       return new Mat(imread_0(filename, flags));
}
// 調(diào)用例子
eg:
Mat bgr = Imgcodecs.imread(filePath, Imgcodecs.IMREAD_UNCHANGED);
Imgproc.cvtColor(bgr, srcMat, Imgproc.COLOR_BGR2RGB);
//Imgcodecs flags 常用參數(shù)含義
public static final int IMREAD_UNCHANGED = -1;  // 無改動
public static final int IMREAD_GRAYSCALE = 0;  // 單通道灰色
public static final int IMREAD_COLOR = 1;  //三通道BGR圖像

Utils.bitmapToMat

通過Utils.bitmapToMat方法獲取Mat對象。

Bitmap bitmap = BitmapFactory.decodeResource(res, R.drawable.icon);
Mat mat = Mat()
// bitmap : 支持ARGB_8888和RGB_565兩種格式
// mat : 類型為CV_8UC4,通道順序為RGBA
Utils.bitmapToMat(bitmap, mat);

主要API - 寫入圖片

   我們可以通過 imwrite方法將Mat對象保存至指定文件

File file = new File(Environment.getExternalStorageDirectory().getPath() + File.separator + "${System.currentTimeMillis()}.jpg");
 if (!file.exists()) {
        file.createNewFile();
 }
// 文件路徑  ,  待輸出mat對象
Imgcodecs.imwrite(file.getPath(), srcMat);

端側(cè)常用分析方法

亮度檢測

計算圖片在灰度圖上的均值和方差,當(dāng)存在亮度異常時,均值會偏離均值點(可以取0-255中間值 128),方差也會偏?。煌ㄟ^計算灰度圖的均值和方差,就可評估圖像是否存在過曝光或曝光不足。

//亮度檢測
private static float brightness(Mat grayImage) {
        float a = 0;
        int Hist[] = new int[256];
        for (int i = 0; i < 256; i++) {
            Hist[i] = 0;
        }
        for (int i = 0; i < grayImage.rows(); i++) {
            for (int j = 0; j < grayImage.cols(); j++) {
                //在計算過程中,考慮128為亮度均值點
                a += (float) (grayImage.get(i, j)[0] - 128);
                int x = (int) grayImage.get(i, j)[0];
                Hist[x]++;
            }
        }
        float da = a / (float) (grayImage.rows() * grayImage.cols());
        float D = Math.abs(da);
        float Ma = 0;
        for (int i = 0; i < 256; i++) {
            Ma += Math.abs(i - 128 - da) * Hist[i];
        }
        Ma /= (float) ((grayImage.rows() * grayImage.cols()));
        float M = Math.abs(Ma);
        float K = D / M;
        float cast = K;
        if (cast >= 1) {
            if (da > 0) {
                Log.e("ymc", "過亮");
            } else {
                Log.e("ymc", "過暗");
            }
        } else {
            Log.e("ymc", "亮度:正常");
        }
        return cast;
    }

清晰度檢測

利用拉普拉斯算子計算圖片的二階導(dǎo)數(shù),反映圖片的邊緣信息,同樣事物的圖片,清晰度高的,相對應(yīng)的經(jīng)過拉普拉斯算子濾波后的圖片的方差也就越大。

//清晰度
private static double clarity(Mat grayImage) {
        Mat laplacianDstImage = new Mat();
        Imgproc.Laplacian(grayImage, laplacianDstImage, CvType.CV_64F);
        MatOfDouble median = new MatOfDouble();
        MatOfDouble std = new MatOfDouble();
        Core.meanStdDev(laplacianDstImage, median, std);
        double clarity = Math.pow(std.get(0, 0)[0], 2);
        //后續(xù)可根據(jù)業(yè)務(wù)設(shè)置閾值
        Log.e("ymc", "清晰度:" + clarity);
        laplacianDstImage.release();
        return clarity;
    }

最后

2022年接觸了很多新東西,在工作中也看到了很多大佬的閃光點,后續(xù)還會有更深入的OpenCV使用案例博文,圖片分析方面還是菜鳥,這篇文章也看了很多Python大佬的文章,正所謂三人行必有我?guī)?,繼續(xù)學(xué)習(xí)。

以上就是Android OpenCV基礎(chǔ)API清晰度亮度識別檢測的詳細(xì)內(nèi)容,更多關(guān)于Android OpenCV API清晰亮度的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Android畫圖之抗鋸齒paint和Canvas兩種方式實例

    Android畫圖之抗鋸齒paint和Canvas兩種方式實例

    本篇文章主要介紹了Android畫圖之抗鋸齒paint和Canvas兩種方式實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Android中的sqlite查詢數(shù)據(jù)時去掉重復(fù)值的方法實例

    Android中的sqlite查詢數(shù)據(jù)時去掉重復(fù)值的方法實例

    今天小編就為大家分享一篇關(guān)于Android中的sqlite查詢數(shù)據(jù)時去掉重復(fù)值的方法實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Android 如何使用SQLite保存數(shù)據(jù)

    Android 如何使用SQLite保存數(shù)據(jù)

    對于重復(fù)數(shù)據(jù)或結(jié)構(gòu)化數(shù)據(jù)(例如聯(lián)系信息),將數(shù)據(jù)保存到數(shù)據(jù)庫是理想選擇,SQL 數(shù)據(jù)庫的主要原則之一是架構(gòu),即數(shù)據(jù)庫組織方式的正式聲明,本篇文章介紹在 Android 上使用 SQLite 數(shù)據(jù)庫,感興趣的朋友一起看看吧
    2024-03-03
  • Android通過ConnectivityManager檢查網(wǎng)絡(luò)狀態(tài)

    Android通過ConnectivityManager檢查網(wǎng)絡(luò)狀態(tài)

    這篇文章主要為大家詳細(xì)介紹了Android通過ConnectivityManager檢查網(wǎng)絡(luò)狀態(tài)的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Android獲取SHA1的方法

    Android獲取SHA1的方法

    這篇文章主要介紹了Android獲取SHA1的方法,需要的朋友可以參考下
    2017-12-12
  • Android View.Post 的原理及缺陷

    Android View.Post 的原理及缺陷

    這篇文章主要介紹了Android View.Post 的原理及缺陷,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下
    2021-03-03
  • Android實現(xiàn)圖片雙指縮放

    Android實現(xiàn)圖片雙指縮放

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)圖片雙指縮放,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Android 設(shè)置顏色的方法總結(jié)

    Android 設(shè)置顏色的方法總結(jié)

    這篇文章主要介紹了Android 設(shè)置顏色的方法總結(jié)的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握設(shè)置顏色的方法,需要的朋友可以參考下
    2017-09-09
  • Android開發(fā)實現(xiàn)布局幀布局霓虹燈效果示例

    Android開發(fā)實現(xiàn)布局幀布局霓虹燈效果示例

    這篇文章主要介紹了Android開發(fā)實現(xiàn)布局幀布局霓虹燈效果,涉及Android界面布局、資源文件操作及屬性設(shè)置等相關(guān)技巧,需要的朋友可以參考下
    2019-04-04
  • Android中傳遞對象的三種方法的實現(xiàn)

    Android中傳遞對象的三種方法的實現(xiàn)

    本篇文章主要介紹了Android中傳遞對象的三種方法的實現(xiàn),可以通過Bundle、Intent或者JSON字符串,有興趣的可以了解一下。
    2017-02-02

最新評論

定陶县| 烟台市| 佛冈县| 井冈山市| 通河县| 淅川县| 瓦房店市| 化州市| 合川市| 安庆市| 体育| 建始县| 五大连池市| 威远县| 大城县| 呼伦贝尔市| 辽源市| 昌江| 冷水江市| 德惠市| 平邑县| 德庆县| 岳阳县| 龙里县| 雷山县| 华池县| 久治县| 民勤县| 突泉县| 彩票| 徐州市| 安吉县| 灵宝市| 兰考县| 浪卡子县| 海原县| 达孜县| 老河口市| 昌平区| 广水市| 锡林浩特市|