opencv-python小课堂-day-06

# 全局二值化
# 二值化:就是将像素变成两种值,比如0,255
# threshold(scr,thresh,maxval,type)
# scr : 最好是灰度图
# thresh : 阈值
# maxval : 最大值,最大值不一定是255
# type : 操作类型
# 常见操作类型:
# [cv._THRESH_BINARY,cv.THRESH_BINARY_INV,cv.THRESH_TRUNC,cv.THRESH_TOZEROS,cv.THRESH_TOZEROS_INV]


import cv2 as cv
import numpy as np


#导入图片
img = cv.imread('./dog.jpeg')#

# 先转化为灰度图
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)

# 二值化,返回两个值,分别是thresh,frame,一个是阈值,一个是二值化处理后的图片
thresh,dst = cv.threshold(gray,100,500,cv.THRESH_BINARY)
# 100
print(thresh)

# cv.imshow("img",img)
cv.imshow('img', np.hstack(( gray,dst)))
cv.waitKey(0)
cv.destroyAllWindows()
# 自适应阈值二值化
# 全局阈值二值化采用的是整幅图像用同一个数作为阈值
# 当一张图上具有不同亮度时,,自适应阈值二值化更实用
# 此时的阈值是根据图像上的每一个小区域计算与其对应的阈值。
# adaptiveThreshold(scr,MaxValue,adaptiveMethod,threshType,blocksize,C,dst=None)
# 指定六个参数,返回值只有一个

# adaptiveMethod计算阈值的方法--常见:
# cv.ADPTIVE-thresh_MEAN_C:阈值取自相邻区域的平均值
# cv.ADPTIVE-thresh_GUASSIAN_C:阈值取值相邻区域的加权和,权重为一个高斯窗口
# BlockSzie:领域大小(用来计算阈值的区域大小)
# C :就是一个常数,阈值等于平均值或者加权平均值减去这个常数

import cv2 as cv
import numpy as np


#导入图片
img = cv.imread('./dog.jpeg')#

# 先转化为灰度图
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)

# 自适应阈值二值化
dst = cv.adaptiveThreshold(gray,255,cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY,3,0)

# cv.imshow("img",img)
cv.imshow('img', np.hstack(( gray,dst)))
cv.waitKey(0)
cv.destroyAllWindows()
# 腐蚀操作
# 腐蚀操作也是用卷积核扫描图像,只不过是腐蚀操作的卷积核一般是1
# 如果所有卷积核内所有像素点都是白色,那么锚点就是白色

# iterations是腐蚀操作的迭代次数,次数越多,腐蚀操作的次数越多
# 腐蚀操作的次数越多,腐蚀效果越明显
# erode(scr,kenrnel,iterations )

import cv2 as cv
import numpy as np


#导入图片
img = cv.imread('./msb.png')#

kernel = np.ones((3,3),np.uint8)
dst = cv.erode(img,kernel = kernel,iterations = 2)
# cv.imshow("img",img)
cv.imshow('img', np.hstack(( img,dst)))
cv.waitKey(0)
cv.destroyAllWindows()
# 获得形态学卷积核
# getStructuringElement(shape,ksize)
# shape是指卷积核的形状,注意不是指长宽,是指卷积核中的1形成的形状。
# MORPH_RECT:卷积核中的1是矩形,常用
# MORPH_ELLIPSE:椭圆
# MORPH_CROSS:十字

import cv2 as cv
import numpy as np


#导入图片
img = cv.imread('./msb.png')#

# kernel = np.ones((3,3),np.uint8)
kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,3))
dst = cv.erode(img,kernel = kernel,iterations = 2)
# cv.imshow("img",img)
cv.imshow('img', np.hstack(( img,dst)))
cv.waitKey(0)
cv.destroyAllWindows()
# 膨胀操作
# 膨胀是腐蚀是的反操作
# 基本原理是只要保证卷积核的锚点是非0值,周边无论是0还是非0值,都会变成非0值
# dilate(scr,kernel,iterations)


import cv2 as cv
import numpy as np


#导入图片
img = cv.imread('./msb.png')#

# kernel = np.ones((3,3),np.uint8)
kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,3))
dst = cv.dilate(img,kernel = kernel,iterations = 2)
# cv.imshow("img",img)
cv.imshow('img', np.hstack(( img,dst)))
cv.waitKey(0)
cv.destroyAllWindows()
# 开运算
# 开运算和闭运算都是腐蚀和膨胀的基本操作
# 开运算 = 腐蚀+膨胀
# morphologyEx(img,MORPH_OPEN,kernel)
# MORPH_OPEN : 表示形态学开运算

import cv2 as cv
import numpy as np


#导入图片
img = cv.imread('./msb.png')#


kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,3))
# dst = cv.dilate(img,kernel = kernel,iterations = 2)
# 开运算提供了一种去除噪声的思路
dst = cv.morphologyEx(img,cv.MORPH_OPEN,kernel,iterations = 2)
# cv.imshow("img",img)
cv.imshow('img', np.hstack(( img,dst)))
cv.waitKey(0)
cv.destroyAllWindows()
# 闭运算 = 膨胀+腐蚀

import cv2 as cv
import numpy as np


#导入图片
img = cv.imread('./msb.png')#


kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,3))
# dst = cv.dilate(img,kernel = kernel,iterations = 2)
dst = cv.morphologyEx(img,cv.MORPH_CLOSE,kernel,iterations = 2)
# cv.imshow("img",img)
cv.imshow('img', np.hstack(( img,dst)))
cv.waitKey(0)
cv.destroyAllWindows()
# 形态学梯度
# 梯度 = 原图-腐蚀
# 腐蚀之后原图边缘变小了,原图-腐蚀就可以得到腐蚀掉的部分,即边缘
import cv2 as cv
import numpy as np


#导入图片
img = cv.imread('./msb.png')#


kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,3))
# dst = cv.dilate(img,kernel = kernel,iterations = 2)
dst = cv.morphologyEx(img,cv.MORPH_GRADIENT,kernel,iterations = 2)
# cv.imshow("img",img)
cv.imshow('img', np.hstack(( img,dst)))
cv.waitKey(0)
cv.destroyAllWindows()
# 顶帽操作-TOPHAT
# 顶帽 = 原图 - 开运算
# 开运算的效果就是去除图像外的噪点,原图 - 开运算就得到了去掉的噪点
import cv2 as cv
import numpy as np


#导入图片
img = cv.imread('./msb.png')#


kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,3))
# dst = cv.dilate(img,kernel = kernel,iterations = 2)
dst = cv.morphologyEx(img,cv.MORPH_TOPHAT,kernel,iterations = 2)
# cv.imshow("img",img)
cv.imshow('img', np.hstack(( img,dst)))
cv.waitKey(0)
cv.destroyAllWindows()
# 黑帽操作
# 黑帽 = 原图 - 闭运算
# 闭运算可以将图形内部的噪点去掉,那么原图 - 闭运算的结果就是图形内部的噪点
import cv2 as cv
import numpy as np


#导入图片
img = cv.imread('./msb.png')#


kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,3))
# dst = cv.dilate(img,kernel = kernel,iterations = 2)
dst = cv.morphologyEx(img,cv.MORPH_BLACKHAT,kernel,iterations = 2)
# cv.imshow("img",img)
cv.imshow('img', np.hstack(( img,dst)))
cv.waitKey(0)
cv.destroyAllWindows()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值