OpenCV for iOS 學(xué)習(xí)筆記(九)—— 圖像毛玻璃處理



  • 函數(shù)

  • 均值平滑函數(shù)(均值濾波器)(blur

所有像素加權(quán)系數(shù)相等。
- blur函數(shù)解析
blur(InputArray src, // 輸入圖像
OutputArray dst, // 輸出圖像
Size ksize, // Size( w,h ): 定義內(nèi)核大小( w 像素寬度, h 像素高度)
Point anchor = Point(-1,-1), // Point(-1, -1): 指定錨點(diǎn)位置(被平滑點(diǎn)), 如果是負(fù)值,取核的中心為錨點(diǎn)
int borderType = BORDER_DEFAULT); // 可省略不寫

  • 高斯平滑函數(shù)(高斯濾波器)(GaussianBlur

中間像素的加權(quán)系數(shù)是最大的, 周邊像素的加權(quán)系數(shù)隨著它們遠(yuǎn)離中間像素的距離增大而逐漸減小。
- GaussianBlur函數(shù)解析
GaussianBlur(InputArray src, // 輸入圖像
OutputArray dst, // 輸出圖像
Size ksize, // Size( w,h ): 定義內(nèi)核大小( w 像素寬度, h 像素高度)
double sigmaX, // x 方向標(biāo)準(zhǔn)方差
double sigmaY = 0, // y 方向標(biāo)準(zhǔn)方差
int borderType = BORDER_DEFAULT)

  • 中值平滑函數(shù)(中值濾波器)(medianBlur

中值濾波將圖像的每個(gè)像素用鄰域 (以當(dāng)前像素為中心的正方形區(qū)域)像素的中值代替。
- medianBlur函數(shù)解析
medianBlur(InputArray src, // 輸入圖像
OutputArray dst, // 輸出圖像
int ksize) // 內(nèi)核大小 (只需一個(gè)值,因?yàn)槲覀兪褂谜叫未翱?,必須為奇數(shù)。

  • 代碼實(shí)現(xiàn)

  • 創(chuàng)建Button
    - (void)createButton {
    NSArray *arr = @[@"Original", @"Homogeneous", @"Gaussian", @"Median"];
    CGFloat w = self.view.frame.size.width / 4;
    CGFloat y = self.view.frame.size.height - 50;
    for (NSInteger i = 0; i < 4; i++) {
    UIButton *button = [UIButton buttonWithType:(UIButtonTypeSystem)];
    button.frame = CGRectMake(w * i, y, w, 40);
    [self.view addSubview:button];
    button.backgroundColor = [UIColor lightGrayColor];
    [button setTitle:arr[i] forState:(UIControlStateNormal)];
    [button addTarget:self action:@selector(buttonClick:) forControlEvents:(UIControlEventTouchUpInside)];
    button.titleLabel.font = [UIFont systemFontOfSize:11];
    button.tag = 1000 + i;
    }
    }
  • Button Click
    - (void)buttonClick:(UIButton *)button {
    NSInteger tag = button.tag;
    switch (tag) {
    case 1000: {
    _imageView1.image = MatToUIImage(src);
    } break;
    // 均值
    case 1001: {
    for (int i = 1; i < MAX_KERNEL_LENGTH; i += 2) {
    blur(src, dst, cv::Size(i, i));
    }
    _imageView1.image = MatToUIImage(dst);
    } break;
    // 高斯
    case 1002: {
    for (int i = 1; i < MAX_KERNEL_LENGTH; i += 2) {
    GaussianBlur(src, dst, cv::Size(i, i), 0);
    }
    _imageView1.image = MatToUIImage(dst);
    } break;
    // 中值
    case 1003: {
    for (int i = 1; i < MAX_KERNEL_LENGTH; i += 2) {
    medianBlur(src, dst, i);
    }
    _imageView1.image = MatToUIImage(dst);
    } break;
    }
    }
  • 全局變量
    int MAX_KERNEL_LENGTH = 20;
    Mat src, dst;
  • 效果

效果圖(*原圖--均值--高斯--中值*)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容