栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

计算机视觉-OpenCV(二)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

计算机视觉-OpenCV(二)

一、图像阈值处理

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

释义:
dst:输出图
src:输入图,只能输入单通道图像,通常来说是灰度图
thresh:阈值(0-255之间数字)
maxval:当像素值超过阈值(或小于阈值,根据type决定),所赋予的值
type:
    cv2.THRESH_BINARY      超过阈值部分去maxval(最大值),否则取0
    cv2.THRESH_BINARY_INV   THRESH_BINARY的反转
    cv2.THRESH_TRUNC       大于阈值部分设为阈值,否则不变
    cv2.THRESH_TOZERO      大于阈值部分不改变,否则设为0
    cv2.THRESH_TOZERO_INV   cv2.THRESH_TOZERO的反转

import cv2   #OpenCV读取格式是BGR
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

img1=cv2.imread('GRAY.png')

ret,dst1=cv2.threshold(img1,127,255,cv2.THRESH_BINARY)
ret,dst2=cv2.threshold(img1,127,255,cv2.THRESH_BINARY_INV)
ret,dst3=cv2.threshold(img1,127,255,cv2.THRESH_TRUNC)
ret,dst4=cv2.threshold(img1,127,255,cv2.THRESH_TOZERO)
ret,dst5=cv2.threshold(img1,127,255,cv2.THRESH_TOZERO_INV)

title=['1','2','3','4','5','6']
images=[img1,dst1,dst2,dst3,dst4,dst5]

for i in range(6):
    plt.subplot(2,3,i+1),plt.title(title[i])
    plt.imshow(images[i],'gray')
    plt.xticks([]),plt.yticks([])
#plt.show
二、图像平滑 2.1均值滤波

简单的平均卷积操作:指定核的大小(3,3),3×3的像素点每个数相加再除9。

实际是通过卷积矩阵实现,构建3×3每个点为1的矩阵,与图像中每个3×3矩阵求内积(对应点位相乘),再求平均

#均值滤波
img=cv2.imread('pic.jpg')
#指定核的大小(3,3),3×3的像素点每个数相加再除9。
#实际是通过卷积矩阵实现,构建3×3每个点为1的矩阵,与图像中每个3×3矩阵求内积(对应点位相乘),再求平均
blur=cv2.blur(img,(3,3))
cv2.imshow('test',blur)
cv2.waitKey(0)
cv2.destroyAllWindows
2.2方框滤波

box=cv2.boxFilter(img,-1,(7,7),normalize=True)

释义:

-1:正常无需修改

normalize=True时与均值滤波相同,每(3×3)点位求和平均值。

normalize=False时,每(3×3)点位求和,超过255就取255。

#方框滤波(归一化)
#normalize=True时与均值滤波相同,每(3×3)点位求和平均值。
box=cv2.boxFilter(img,-1,(7,7),normalize=True)
cv2.imshow('test',box)
cv2.waitKey(0)
cv2.destroyAllWindows




#方框滤波(不归一化)
#normalize==False时,每(3×3)点位求和,超过255就取255。
box=cv2.boxFilter(img,-1,(3,3),normalize=False)
cv2.imshow('test',box)
cv2.waitKey(0)
cv2.destroyAllWindows
2.3高斯滤波

高斯分布:越靠近中间,值越大,越重要

实现也是通过构建矩阵,但越靠近中心点矩阵比重越大,最大为1,再与图像矩阵求内积

#高斯滤波
#高斯分布(越靠近中间,值越大,越重要)
#也是构建矩阵,但越靠近中心点矩阵比重越大,最大为1,再与图像矩阵求内积
aussian=cv2.GaussianBlur(img1,(5,5),1)
cv2.imshow('test',aussian)
cv2.waitKey(0)
cv2.destroyAllWindows
2.4中值滤波

将图像的像素点排序,取中值

#中值滤波
#将图像的像素点排序,取中值
median=cv2.medianBlur(img1,5)
cv2.imshow('test',median)
cv2.waitKey(0)
cv2.destroyAllWindows


#图像拼接显示
res=np.hstack((median,aussian))
cv2.imshow('test',res)
cv2.waitKey(0)
cv2.destroyAllWindows
三、形态学操作 3.1腐蚀操作

去除图像类似毛刺等杂质的操作

#核:选择多大的核进行腐蚀操作
kernal=np.ones((5,5),np.uint8)
#iterations:迭代次数,进行几次腐蚀操作
erosion=cv2.erode(img,kernal,iterations=2)
cv2.imshow('test',erosion)
cv2.waitKey(0)
cv2.destroyAllWindows
3.2膨胀操作

与腐蚀操作相反,使图像内容膨胀

kernal=np.ones((5,5),np.uint8)

dilate=cv2.dilate(erosion,kernal,iterations=2)
cv2.imshow('test',erosion)
cv2.waitKey(0)
cv2.destroyAllWindows
3.3开运算

开运算:先腐蚀再膨胀

#开运算:先腐蚀再膨胀
kernal=np.ones((5,5),np.uint8)
opening=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernal)
cv2.imshow('test',opening)
cv2.waitKey(0)
cv2.destroyAllWindows
3.4闭运算

闭运算:先膨胀再腐蚀

#闭运算:先膨胀再腐蚀
kernal=np.ones((5,5),np.uint8)
opening=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernal)
cv2.imshow('test',opening)
cv2.waitKey(0)
cv2.destroyAllWindows
3.5梯度运算

梯度运算=膨胀后的图像-腐蚀后的图像

#梯度运算=膨胀后的图像-腐蚀后的图像
kernal=np.ones((5,5),np.uint8)
dilate=cv2.dilate(img,kernal,iterations=5)
erosion=cv2.erode(img,kernal,iterations=5)
res=np.hstack((dilate,erosion))
cv2.imshow('test',res)
cv2.waitKey(0)
cv2.destroyAllWindows
3.6礼帽与黑帽

礼帽:原始图像-开运算结果(只剩毛刺)

黑帽:闭运算结果-原始图像(只剩图像边缘)

#礼帽:原始图像-开运算结果
kernal=np.ones((5,5),np.uint8)
tophat=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernal)
cv2.imshow('test',tophat)
cv2.waitKey(0)
cv2.destroyAllWindows



#黑帽:闭运算结果-原始图像
kernal=np.ones((5,5),np.uint8)
blackhat=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernal)
cv2.imshow('test',blackhat)
cv2.waitKey(0)
cv2.destroyAllWindows
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/834933.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号