python opencv 常用操作

API文档地址

opencv2.3.2
opencv3.0


基础
imgfill = np.zeros((H, W), dtype=np.uint8) #创建图像格式的空白图片
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #色彩转换
entr_img = cv2.cvtColor(entr_img,cv2.COLOR_GRAY2BGR)

常用
#边缘检测 sobel
x = cv2.Sobel(image, cv2.CV_16S, 1, 0)
y = cv2.Sobel(image, cv2.CV_16S, 0, 1)
absX = cv2.convertScaleAbs(x)  # 转回unit8
absY = cv2.convertScaleAbs(y)
dst = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)
#scharr
x = cv2.Scharr(image, cv2.CV_16S, 1, 0)
y = cv2.Scharr(image, cv2.CV_16S, 0, 1)
absX = cv2.convertScaleAbs(x)  # 转回unit8
absY = cv2.convertScaleAbs(y)
dst = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)
# Prewitt算子
kernelx = np.array([[1, 1, 1], [0, 0, 0], [-1, -1, -1]], dtype=int)
kernely = np.array([[-1, 0, 1], [-1, 0, 1], [-1, 0, 1]], dtype=int)
x = cv2.filter2D(image, cv2.CV_16S, kernelx)
y = cv2.filter2D(image, cv2.CV_16S, kernely)
absX = cv2.convertScaleAbs(x)# 转uint8
absY = cv2.convertScaleAbs(y)
dst = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)
#Laplacian
dst = cv2.Laplacian(image, cv2.CV_16S, ksize=3)
dst = cv2.convertScaleAbs(dst)
#锐化
kennel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)  # 锐化操作,试图向更立体
dst = cv2.filter2D(dst, -1, kennel)
#高斯双边
dst=cv2.bilateralFilter(src=image,d=0,sigmaColor=100,sigmaSpace=15)# img, 邻域直径,空间高斯函数标准差,灰度值相似性高斯函数标准差
#膨胀腐蚀
kernel = np.ones((3, 3), np.uint8)
img = cv2.dilate(img, kernel, iterations=1)
kernel = np.ones((2, 2), np.uint8)
img = cv2.erode(img, kernel, iterations=1)
#画点
cv2.circle(img, (cX, cY), 1, (0, 0, 255), -1)

PLT获取信息熵,并保存

#示例
#https://scikit-image.org/docs/0.14.x/auto_examples/filters/plot_entropy.html#sphx-glr-auto-examples-filters-plot-entropy-py


轮廓内区域填充

参考
在这里插入图片描述

import cv2,os
from skimage import data,color,morphology,feature
from matplotlib import pyplot as plt
src = 'img/Troi/'
src1 = 'img/contours/'
dst = 'img/liquidFill/'

list = os.listdir(src1)
for i in list:
  # print(i)
  # if i == 'img9index14.jpg':
    imgs = cv2.imread(src+i,0)
    H, W = imgs.shape
    img = cv2.imread(src1+i,0)
    img = cv2.resize(img,(W,H))
    H, W = img.shape
    edgs=feature.canny(img, sigma=3, low_threshold=10, high_threshold=50) 

    chull = morphology.convex_hull_object(edgs)
    print(chull)
    #绘制轮廓
    fig, axes = plt.subplots(1,2,figsize=(8,8))
    ax0, ax1= axes.ravel()
    ax0.imshow(edgs,plt.cm.gray)
    ax0.set_title('many objects')
    ax1.imshow(chull,plt.cm.gray)
    ax1.set_title('convex_hull image')
    plt.show()

泛洪算法填充
cv2.floodFill(img, mask, seed, newvalue(BGR), (loDiff1,loDiff2,loDiff3), (upDiff1,upDiff2,upDiff3), flag)

img:为待使用泛洪算法的图像
mask:为掩码层,使用掩码可以规定是在哪个区域使用该算法,如果是对于完整图像都要使用,则掩码层大小为原图行数+2,列数+2.是一个二维的0矩阵,边缘一圈会在使用算法是置为1。而只有对于掩码层上对应为0的位置才能泛洪,所以掩码层初始化为0矩阵。【dtype:np.uint8】
seed:为泛洪算法的种子点,也是根据该点的像素判断决定和其相近颜色的像素点,是否被泛洪处理。
newvalue:是对于泛洪区域新赋的值(B,G,R)
(loDiff1,loDiff2,loDiff3):是相对于seed种子点像素可以往下的像素值,即seed(B0,G0,R0),泛洪区域下界为(B0-loDiff1,G0-loDiff2,R0-loDiff3)
(upDiff1,upDiff2,upDiff3):是相对于seed种子点像素可以往上的像素值,即seed(B0,G0,R0),泛洪区域上界为(B0+upDiff1,G0+upDiff2,R0+upDiff3)
flag:为泛洪算法的处理模式。

#根据边缘填充获取最终积液区域
import cv2,os
from skimage import data,color,morphology,feature
from matplotlib import pyplot as plt
import numpy as np
src = 'img/2TRroi/'
src1 = 'img/cont/contours/'
dst = 'img/cont/liquid/'

list = os.listdir(src1)
for i in list:
  print(i)
# if i == 'img9index14.jpg':
  img1 = cv2.imread(src+i,0)
  H, W = img1.shape
  img = cv2.imread(src1+i,0)
  img = cv2.resize(img,(W,H))
  H, W = img.shape
  mask = np.zeros([H+2, W+2], np.uint8)#新建图像矩阵 要原尺寸+2哦
  cv2.floodFill(img, mask, (1,1), 255, 20, 150, cv2.FLOODFILL_FIXED_RANGE) #外部填充
  img = cv2.bitwise_not(img) #反转像素
  cv2.imwrite(dst+i,img)

边缘图像
边缘图像
结果图像
在这里插入图片描述
截图展示的,大小不一。。。


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值