1. 程式人生 > >opencv基礎-平滑濾波

opencv基礎-平滑濾波

opencv基礎-高斯平滑濾波

函式原型

cv::GaussianBlur( src, dst, cv::Size(param1, param2), param3, param4, cv::BORDER_REPLICATE );
void cv::GaussianBlur( InputArray _src, OutputArray _dst, Size ksize,
                   double sigma1, double sigma2,
                   int borderType )
{
    CV_INSTRUMENT_REGION()

    int type = _src.type();
    Size size = _src.size();
    _dst.create( size, type );

    if( (borderType & ~BORDER_ISOLATED) != BORDER_CONSTANT &&
        ((borderType & BORDER_ISOLATED) != 0 || !_src.getMat().isSubmatrix()) )
    {
        if( size.height == 1 )
            ksize.height = 1;
        if( size.width == 1 )
            ksize.width = 1;
    }

    if( ksize.width == 1 && ksize.height == 1 )
    {
        _src.copyTo(_dst);
        return;
    }

    bool useOpenCL = (ocl::isOpenCLActivated() && _dst.isUMat() && _src.dims() <= 2 &&
               ((ksize.width == 3 && ksize.height == 3) ||
               (ksize.width == 5 && ksize.height == 5)) &&
               _src.rows() > ksize.height && _src.cols() > ksize.width);
    (void)useOpenCL;

    int sdepth = CV_MAT_DEPTH(type), cn = CV_MAT_CN(type);

    if(sdepth == CV_8U && ((borderType & BORDER_ISOLATED) || !_src.getMat().isSubmatrix()))
    {
        std::vector<ufixedpoint16> fkx, fky;
        createGaussianKernels(fkx, fky, type, ksize, sigma1, sigma2);
        Mat src = _src.getMat();
        Mat dst = _dst.getMat();
        if (src.data == dst.data)
            src = src.clone();
        fixedSmoothInvoker<uint8_t, ufixedpoint16> invoker(src.ptr<uint8_t>(), src.step1(), dst.ptr<uint8_t>(), dst.step1(), dst.cols, dst.rows, dst.channels(), &fkx[0], (int)fkx.size(), &fky[0], (int)fky.size(), borderType & ~BORDER_ISOLATED);
        parallel_for_(Range(0, dst.rows), invoker, std::max(1, std::min(getNumThreads(), getNumberOfCPUs())));
        return;
    }


    Mat kx, ky;
    createGaussianKernels(kx, ky, type, ksize, sigma1, sigma2);

    CV_OCL_RUN(useOpenCL, ocl_GaussianBlur_8UC1(_src, _dst, ksize, CV_MAT_DEPTH(type), kx, ky, borderType));

    CV_OCL_RUN(_dst.isUMat() && _src.dims() <= 2 && (size_t)_src.rows() > kx.total() && (size_t)_src.cols() > kx.total(),
               ocl_sepFilter2D(_src, _dst, sdepth, kx, ky, Point(-1, -1), 0, borderType))

    Mat src = _src.getMat();
    Mat dst = _dst.getMat();

    Point ofs;
    Size wsz(src.cols, src.rows);
    if(!(borderType & BORDER_ISOLATED))
        src.locateROI( wsz, ofs );

    CALL_HAL(gaussianBlur, cv_hal_gaussianBlur, src.ptr(), src.step, dst.ptr(), dst.step, src.cols, src.rows, sdepth, cn,
             ofs.x, ofs.y, wsz.width - src.cols - ofs.x, wsz.height - src.rows - ofs.y, ksize.width, ksize.height,
             sigma1, sigma2, borderType&~BORDER_ISOLATED);

    CV_OVX_RUN(true,
               openvx_gaussianBlur(src, dst, ksize, sigma1, sigma2, borderType))

    CV_IPP_RUN_FAST(ipp_GaussianBlur(src, dst, ksize, sigma1, sigma2, borderType));

    sepFilter2D(src, dst, sdepth, kx, ky, Point(-1, -1), 0, borderType);
}

相關推薦

opencv基礎-平滑濾波

opencv基礎-高斯平滑濾波 函式原型 cv::GaussianBlur( src, dst, cv::Size(param1, param2), param3, param4, cv::BORDER_REPLICATE ); void cv::GaussianBlu

OpenCV的影象濾波平滑操作

濾波器 cv2.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]]) →

OpenCV之cvSmooth函式平滑濾波

1、cvSmooth函式用法  定義原型    void cvSmooth( const CvArr* src, CvArr* dst,int smoothtype=CV_GAUSSIAN,                int param1, int param2,

python+opencv實現高斯平滑濾波

功能: 建立兩個滑動條來分別控制高斯核的size和σ的大小,這個程式是在閾值分割的那個程式上改動的。閾值分割程式在這 注意:由於σ=0時,opencv會根據視窗大小計算出σ,所以,從0滑動σ的滑動條

OpenCV基礎(六)---圖像濾波

bim height 空間 int 空域濾波 edwin 思路 idt med 圖像濾波 對圖像進行單個像素操作,主要是進行對比度和閾值處理 而圖像濾波在像素鄰域間進行,一來達到我們希望的效果,二來進一步進行圖像特征提取 濾波分為空間域和頻域濾波,空間域濾波又分線性

【圖像處理】openCV基礎使用

通道數 信息 pty 設置 淺復制 AI stat 讀取 exp openCV 基礎學習 with:於士琪openCV基礎 env:opencv3.4.0+vc2017集成開發環境 圖像的表示:矩陣 1. 灰度矩陣 <br> 2. 彩色(多通道)如RGB圖像

(ING)OpenCV基礎_矩陣/影象/視訊的讀寫

目錄 1. OpenCV簡介與學習建議 2. GUI指令 3. OpenCV基本資料結構 4. 數字影象處理 5. 矩陣處理 6. 視訊處理 1. OpenCV簡介與學習建議 1.1 OpenCV簡介 (1)特點 (2)功能 (3)包含模組 1.2 學習資源

opencv基礎教程 之 影象基礎和繪圖

1,教程:感謝小強 2,用argparse傳引數來顯示一張圖片 #!/usr/bin/python #linux系統 #coding=utf-8 import cv2 import argparse #python很常用的一個自帶包 ap=argparse.ArgumentParse

Opencv基礎: Mat類裡setTo函式詳解

https://blog.csdn.net/oMoDao1/article/details/80324360 函式原型:   /** @brief Sets all or some of the array elements to the specified value. &n

macOS opencv python 影象濾波

opencv python 影象平滑和濾波 1,高斯濾波 1,高斯濾波 #! /usr/local/bin/python3 # coding:utf-8 """ 影象二值化 全域性閥值 """ from PIL import Image im

opencv基礎】linux系統opencv的安裝

  操作步驟 1.下載對應版本(以3.3.1為例)的原始碼並解壓; 2.編譯安裝; /opt/opencv-3.3.1$ cd build/ /opt/opencv-3.3.1/build$ sudo cmake .. /opt/opencv-3.3.1/build$ sudo m

初識 OpenCV 之均值濾波,中值濾波

影象的噪聲 就是隻影象在攝取的過程中或者是在傳輸的過程中受到隨機干擾訊號 我們常見的噪聲有椒鹽噪聲和高斯噪聲 椒鹽噪聲:出現的位置隨機,但是噪聲的幅值基本相同的 高斯噪聲:出現位置固定,但是噪聲的幅值基本是固定的 怎麼才能把不需要的噪聲濾掉呢,其中最基本的就是均值濾

opencv基礎(2)——利用ROI實現影象疊加

1、簡介 ROI(region of interest),感興趣區域。機器視覺、影象處理中,從被處理的影象以方框、圓、橢圓、不規則多邊形等方式勾勒出需要處理的區域,稱為感興趣區域,ROI。在Halcon、OpenCV、Matlab等機器視覺軟體上常用到各種運算元(Opera

opencv基礎(3)——cvFindContours提取輪廓

1、findContours函式原型以及引數介紹 void findContours (                  InputOutputArray image,            //輸入影象,必須是8位單通道影象,並且應該轉化成二值的          

Python-OpenCV基礎:影象的全景拼接

背景介紹 圖片的全景拼接如今已不再稀奇,現在的智慧攝像機和手機攝像頭基本都帶有圖片自動全景拼接的功能,但是一般都會要求拍攝者保持裝置的平穩以及單方向的移動取景以實現較好的拼接結果。這是因為拼接的圖片之間必須要有相似的區域以保證拼接結果的準確性和完整性。本文主要簡單描述如何用 Python 和

Python-OpenCV基礎:影象的讀寫,尺寸和儲存

為什麼使用Python-OpenCV 雖然python 很強大,而且也有自己的影象處理庫PIL,但是相對於OpenCV 來講,它還是弱小很多。跟很多開源軟體一樣OpenCV 也提供了完善的python 介面,非常便於呼叫。OpenCV 的穩定版是2.4.8,最新版是4.0,包含了超過2500

OpenCV中值濾波

                #include <cv.h> #include <highgui.h>#pragma comment(lib, "ml.lib")#pragma comment(lib, "cv.lib")#pragma comment(lib, "cvaux.lib

C++ Opencv——影象處理——濾波

https://blog.csdn.net/zoucharming/article/details/70197863 在影象處理中,儘可能消除圖片中的噪聲,消除噪聲就需要用到濾波,在本次opencv學習中,學習了三個濾波方式。 (1)平均濾波,就是將一個區域內的畫素值求和取平均值,然後用這個

opencv 頻率域濾波例項

先上參考連結:http://blog.csdn.net/qq_19764963/article/details/51209970 http://www.cnblogs.com/TonyHome/p/4010116.html 這裡給出高斯濾波器的例項,關於傅立葉變換的詳細步驟,可以看上一篇部落

opencv基礎】 000 寫在前面

【opencv基礎】系列文章是筆者在學習opencv期間的系列筆記。 旨在記錄自己學習軌跡和督促自己,也為了方便愛好影象處理、愛好Opencv的人作為一個簡單入門參考。 主要參考資料: [1]《 OpenC V3程式設計入門》,毛星雲,2015年2月出版 [2]《學習Ope