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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

openCV 图像清晰度检测

發布時間:2023/12/24 综合教程 38 生活家
生活随笔 收集整理的這篇文章主要介紹了 openCV 图像清晰度检测 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

圖像清晰度評價算法有很多種,在空域中,主要思路是考察圖像的領域對比度,即相鄰像素間的灰度特征的梯度差;在頻域中,主要思路是考察圖像的頻率分量,對焦清晰的圖像高頻分量較多,對焦模糊的圖像低頻分量較多。

這里實現3種清晰度評價方法,分別是Tenengrad梯度方法Laplacian梯度方法方差方法

1.Tenengrad梯度方法

Tenengrad梯度方法利用Sobel算子分別計算水平和垂直方向的梯度,同一場景下梯度值越高,圖像越清晰。以下是具體實現。

    Mat img;
Mat imgROI;
Mat imgGray;
Mat imageSobel;
//添加圖片
img = Mat(m_frameInfo.uHeight/4, m_frameInfo.uWidth/4,CV_8UC3, pRGB).clone();
    //設置ROI尺寸
imgROI.create(img.rows, img.cols, CV_8UC3); //生成ROI圖 img(Rect(width, height, 150, 150)).copyTo(imgROI); //轉灰度圖 cvtColor(imgROI, imgGray, CV_BGR2GRAY); //Sobel算子計算梯度值 Sobel(imgGray, imageSobel, CV_16U, 1, 1); //傳值 meanValue = mean(imageSobel)[0];
//返回值
return meanValue;

這里衡量的指標是經過Sobel算子處理后的圖像的平均灰度值,值越大,代表圖像越清晰。

2.Laplacian梯度方法

Laplacian梯度是另一種求圖像梯度的方法,在上例的OpenCV代碼中直接替換Sobel算子即可。

    Mat img;
Mat imgROI;
Mat imgGray;
Mat imageSobel;
    //添加圖片
    img = Mat(m_frameInfo.uHeight/4, m_frameInfo.uWidth/4,CV_8UC3, pRGB).clone();
    //設置ROI尺寸
    imgROI.create(img.rows, img.cols, CV_8UC3);
    //生成ROI圖
    img(Rect(width, height, 150, 150)).copyTo(imgROI);
    //轉灰度圖
    cvtColor(imgROI, imgGray, CV_BGR2GRAY);
    //Laplacian算子計算梯度值,就換了算子而已
    Laplacian(imageGrey, imageSobel, CV_16U);
    //傳值
    meanValue = mean(imageSobel)[0];
    //返回值
    return meanValue;

測試結果都是數據越大,圖像越清晰的,這里不作展示了。

3.方差方法

方差是概率論中用來考察一組離散數據和其期望(即數據的均值)之間的離散(偏離)成都的度量方法。方差較大,表示這一組數據之間的偏差就較大,組內的數據有的較大,有的較小,分布不均衡;方差較小,表示這一組數據之間的偏差較小,組內的數據之間分布平均,大小相近。對焦清晰的圖像相比對焦模糊的圖像,它的數據之間的灰度差異應該更大,即它的方差應該較大,可以通過圖像灰度數據的方差來衡量圖像的清晰度,方差越大,表示清晰度越好。

    Mat img;
Mat imgROI;
Mat imgGray;
Mat imageSobel;
Mat
meanValueImage;
    //添加圖片
    img = Mat(m_frameInfo.uHeight/4, m_frameInfo.uWidth/4,CV_8UC3, pRGB).clone();
    //設置ROI尺寸
    imgROI.create(img.rows, img.cols, CV_8UC3);
    //生成ROI圖
    img(Rect(width, height, 150, 150)).copyTo(imgROI);
    //轉灰度圖
    cvtColor(imgROI, imgGray, CV_BGR2GRAY);
    //求灰度圖像的標準差
    meanStdDev(imageGrey,meanValueImage,imageSobel);
    //傳值
    meanValue = mean(imageSobel)[0];
    //返回值
    return meanValue;

測試結果都是數據越大,圖像越清晰的,這里不作展示了。

總結

以上是生活随笔為你收集整理的openCV 图像清晰度检测的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。