计算机视觉_头歌实验

本文介绍了如何使用OpenCV在Python中进行图像的阈值处理(包括THRESH_BINARY、THRESH_BINARY_INV等)和不同类型的滤波器(如均值滤波、高斯滤波、方框滤波和中值滤波)对图像进行平滑处理,以实现在给定图片上进行阈值分割和噪声消除的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<计算机视觉头歌实验>

第一单元:图像的阈值和平滑

第一题

(图像的阈值处理以及灰度,交换rgb通道处理)
根据提示,在右侧编辑器补充 Begin-End 区间代码,实现对给定图片实现阈值分割图像的任务。具体要求如下:
使用 OpenCV 提供的函数读取路径下的图片cat.jpg;
交换通道为RGB;
把读入的图片转化为灰度图;
分别对灰度图进行阈值化操作:
THRESH_BINARY、THRESH_BINARY_INV、THRESH_TRUNC、THRESH_TOZERO、THRESH_TOZERO_INV。

阈值为150, 最大值为255,并且将返回的灰度图分别命名为thresh1 ~ thresh5。

import cv2
import matplotlib.pyplot as plt
def thd():
    filepath='/data/workspace/myshixun/task1/'
    # 请根据左侧编程要求,完成图像阈值化操作:
    ########## Begin ##########
    # 读取图像
    img = cv2.imread(filepath + 'cat.jpg')
    img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
    ##img = img_gray
    thresh1 = cv2.threshold(img_gray, 150, 255, cv2.THRESH_BINARY)[1]
    thresh2 = cv2.threshold(img_gray, 150, 255, cv2.THRESH_BINARY_INV)[1]
    thresh3 = cv2.threshold(img_gray, 150, 255, cv2.THRESH_TRUNC)[1]
    thresh4 = cv2.threshold(img_gray, 150, 255, cv2.THRESH_TOZERO)[1]
    thresh5 = cv2.threshold(img_gray, 150, 255, cv2.THRESH_TOZERO_INV)[1]
    ########## End ##########
    img = img_rgb

    # 作图并保存到指定路径
    titles = ['Original Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
    images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]
    for i in range(6):
        plt.subplot(2, 3, i + 1), plt.imshow(images[i], 'gray')
        plt.title(titles[i])
        plt.xticks([]), plt.yticks([])
    plt.savefig(filepath+'out/threthold.png')


第二题

(多种滤波器对图像的平滑处理)
根据提示,在右侧编辑器补充 Begin-End 区间的代码,实现图像的平滑处理。具体要求如下:

读取filepath下的pic.png作为待处理图像;
更改图像通道为RGB通道顺序;
分别使用
均值滤波、高斯滤波、方框滤波、中值滤波
对图像进行滤波操作。返回的图像变量请分别命名为res1 ~ res4。其中所有的滤波器核大小为5x5;高斯滤波的sigmaX、sigmaY由ksize计算;方框滤波输出与原始图像一致,不使用归一化处理。

import cv2
import matplotlib.pyplot as plt

# 使用图像平滑处理带噪声的图片
def flt():
    filepath = '/data/workspace/myshixun/task2/'
    # 请根据左侧编程要求,完成图像平滑操作:
    ########## Begin ##########
   # 读取图像
    img = cv2.imread(filepath + 'pic.png')
    
    # 将通道交换为RGB顺序
    img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    
    # 图像平滑操作
    res1 = cv2.blur(img_rgb, (5, 5))
    res2 = cv2.GaussianBlur(img_rgb, (5, 5), 0, 0)
    res3 = cv2.boxFilter(img_rgb, -1, (5, 5), False)
    res4 = cv2.medianBlur(img_rgb, 5)
    
    
   
   
    ########## End ##########

    # 作图并保存到指定路径
    titles = ['Blur', 'GaussianBlur', 'boxFilter', 'medianBlur']
    images = [res1, res2, res3, res4]
    # 分别画出四个子图,并保存为filter.png
    for i in range(4):
        plt.subplot(2, 2, i + 1), plt.imshow(images[i], 'gray')
        plt.title(titles[i])
        plt.xticks([]), plt.yticks([])
    plt.savefig(filepath+'out/filter.png')

END

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值