中cv2高斯函数_[机器学习]cv2图像处理

fb7609c85963e6c43e3cfbec0ab97415.png

本文首发于个人blog:http://booleflow.com/

主要基于OpenCV

以下所有代码在mac python3 jupyter notebook下测试通过。

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from __future__ import division
from __future__ import print_function
%matplotlib inline
# 本文中主要使用cv2处理图片,但不利于在notebook中展示,所以使用plt输出前做简单处理
def img_convert(cv2_img):
    """
    cv2使用BGR,plt使用RGB
    包含灰度,3通道,4通道
    下面这个不好使
    ret_img = cv2.cvtColor(ret_img, cv2.COLOR_BGR2RGB)
    """
    if len(cv2_img.shape) == 2:
        return cv2_img
    elif len(cv2_img.shape) == 3 and cv2_img.shape[2] == 3:
        b, g, r = cv2.split(cv2_img)
        return cv2.merge((r, g, b))
    elif len(cv2_img.shape) == 3 and cv2_img.shape[2] == 4:
        b, g, r, a = cv2.split(cv2_img)
        return cv2.merge((r, g, b, a))
    else:
        return cv2_img

阈值

threshold 简单阈值

介绍

顾名思义,通过阈值处理,大于为1,小于则为0,使用函数cv2.threshold()。参数解释如下:

ret, dst = cv2.threshold (src, thresh, maxval, type)

  • src:源图片,必须是单通道
  • dst:输出图
  • thresh:阈值,取值范围0~255
  • maxval:填充色,取值范围0~255
  • type:阈值类型,具体见下表

575c049a38c0a26bf3e3eea0ecd5eb8b.png

type还可以写为如下:

type:二值化操作的类型,包含以下5种类型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV

实现

import numpy as np
import cv2
import matplotlib.pyplot as plt
ori_img = cv2.imread('../Fast_neural_style/img_d2cfac63.jpeg')
# 现转化为单通道图
img_gray = cv2.cvtColor(ori_img, cv2.COLOR_RGB2GRAY)

imgs = [ori_img] + [img_gray]
title = ['ori_img', 'img_gray']
# 简单阈值处理
for typ in range(0, 5, 1):
    _, thresh = cv2.threshold(img_gray, 150, 255, type=typ)
    title.append('type_' + str(typ))
    imgs = imgs + [thresh]
# 可视化
plt.figure(figsize=(12,6))
for i in range(7):
    plt.subplot(2, 4, i + 1), plt.imshow(img_convert(imgs[i]), 'gray')
    plt.title(title[i])
plt.show()

cfec1535740b5369bc84bf16fd622b37.png

adaptiveThreshold 自适应阈值

介绍

简单阈值对图片对处理过于简单粗暴,特别是对对色彩复杂图片,处理后很多细节都无法复现。自适应阈值则根据图像上的每个小区域计算与其对应的阈值,不同区域采用不同阈值。可使用cv2.adaptiveThreshold()实现。参数解释如下:

dst = cv2.adaptiveThreshold(src, maxval, thresh_type, type, Block Size, C)

  • src:源图片,只能输入单通道图像
  • dst: 输出图
  • maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
  • thresh_type: 阈值的计算方法,包含以下2种类型:cv2.ADAPTIVE_THRESH_MEAN_C,阈值即取相邻领域的平均值; cv2.ADAPTIVE_THRESH_GAUSSIAN_C,阈值同样取自相邻领域,只是不再是平均值,而是加权平均,权重为一个高斯窗口
  • type:二值化操作的类型,与固定阈值函数相同,包含以下5种类型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV.
  • Block Size: 图片中分块的大小
  • C :阈值计算方法中的常数项

实现

ret, th1 = cv2.threshold(img_gray, 150, 255, cv2.THRESH_BINARY)
th2 = cv2.adaptiveThreshold(img_gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 9, 12)
th3 = cv2.adaptiveThreshold(img_gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 9, 12)

plt.figure(figsize=(8, 8))
plt.subplot(221), plt.imshow(img_convert(ori_img), cmap='gray'), plt.title('original_img')
plt.subplot(222), plt.imshow(img_convert(th1), cmap='gray'), plt.title('th_binary')
plt.subplot(223), plt.imshow(img_convert(th2), cmap='gray'), plt.title('mean')
plt.subplot(224), plt.imshow(img_convert(th3), cmap='gray'), plt.title('gauss')
plt.show()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值