opencv学习笔记(18)其他形态学操作

顶帽(tophat)

定义(defination)

  • 顶帽是原图像与开操作之间的差值图像。

API演示

#coding=UTF-8
import cv2 as cv
import numpy as np
def top_hat_demo(image):
  gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
  kernel = cv.getStructuringElement(cv.MORPH_RECT,(5,5))
  dst = cv.morphologyEx(gray,cv.MORPH_TOPHAT,kernel)
  cv.imshow("tophat_origin",dst)
  #为了显示地更清楚,所以增加了图像的亮度
  cimage = np.array(gray.shape,np.uint8)
  cimage = 100
  dst = cv.add(dst,cimage)
  cv.imshow("tophat_modification",dst)

scr = cv.imread("D:/academic/picture/opencv_data/lena.jpg")
cv.imshow("input image",scr)
top_hat_demo(scr)
cv.waitKey(0)
cv.destroyAllWindows()

效果

在这里插入图片描述

黑帽(blackhat)

定义(defination)

  • 黑帽是闭操作图像与原图像的差值图像。

API演示

#coding=UTF-8
import cv2 as cv
import numpy as np
def black_hat_demo(image):
   gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
   kernel = cv.getStructuringElement(cv.MORPH_RECT,(5,5))
   dst = cv.morphologyEx(gray,cv.MORPH_BLACKHAT,kernel)
   cv.imshow("blackhat_origin",dst)
    #为了显示地更清楚,所以增加了图像的亮度
   cimage = np.array(gray.shape,np.uint8)
   cimage = 100
   dst = cv.add(dst,cimage)
   cv.imshow("blackhat_modification",dst)

scr = cv.imread("D:/academic/picture/opencv_data/lena.jpg")
cv.imshow("input image",scr)
black_hat_demo(scr)
cv.waitKey(0)
cv.destroyAllWindows()

效果

在这里插入图片描述

形态学梯度(gradient)

基本梯度(basic gradient)

定义(defination)

  • 基本梯度是用膨胀后的图像减去腐蚀后的图像得到的差值图像,称为梯度图像,也是opencv中支持的计算形态学梯度的方法,而此方法得到梯度又被称为基本梯度。

API演示

#coding=UTF-8
import cv2 as cv
import numpy as np
def basic_gradient_demo(image):
   gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
   kernel = cv.getStructuringElement(cv.MORPH_RECT,(5,5))
   dst = cv.morphologyEx(gray,cv.MORPH_GRADIENT,kernel)
   cv.imshow("basic gradient",dst)

scr = cv.imread("D:/academic/picture/opencv_data/lena.jpg")
cv.imshow("input image",scr)
basic_gradient_demo(scr)
cv.waitKey(0)
cv.destroyAllWindows()

效果

在这里插入图片描述

内部梯度与外部梯度(internal gradient and external gradient)

定义(defination)

  • 内部梯度是用原图像减去腐蚀后的图像得到的差值图像。
  • 外部梯度是用膨胀之后的图像再减去原来的图像得到的差值图像。

API演示

#coding=UTF-8
import cv2 as cv
import numpy as np
def gradient_demo(image):
    kernel = cv.getStructuringElement(cv.MORPH_RECT,(5,5))
    dm = cv.dilate(image,kernel)
    em = cv.erode(image,kernel)
    dst1 = cv.subtract(image,em) #internel gradient
    dst2 = cv.subtract(dm,image) #externel gradient
    cv.imshow("internel",dst1)
    cv.imshow("externel",dst2)

scr = cv.imread("D:/academic/picture/opencv_data/lena.jpg")
cv.imshow("input image",scr)
gradient_demo(scr)
cv.waitKey(0)
cv.destroyAllWindows()

效果

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值