Python和OpenCV图像边缘检测分割

 

元学习论文总结||小样本学习论文总结

2017-2019年计算机视觉顶会文章收录 AAAI2017-2019 CVPR2017-2019 ECCV2018 ICCV2017-2019 ICLR2017-2019 NIPS2017-2019

 


Opencv之图像分割原理:https://www.jianshu.com/p/4ffdf060fe57

掩膜操作:https://blog.csdn.net/u011028345/article/details/77278467

生成边界框box:https://blog.csdn.net/sinat_36458870/article/details/78825571

介绍:https://blog.csdn.net/hjxu2016/article/details/77833336

几种方法介绍:https://blog.csdn.net/on2way/article/details/46812121

关于阈值设定:https://blog.csdn.net/on2way/article/details/46812121

opencv绘制轮廓的外接矩形和圆:https://jingyan.baidu.com/article/c74d6000d6a2f40f6a595ddf.html

cv2.findContours:

参数

第一个参数是寻找轮廓的图像;

第二个参数表示轮廓的检索模式,有四种(本文介绍的都是新的cv2接口):
    cv2.RETR_EXTERNAL表示只检测外轮廓
    cv2.RETR_LIST检测的轮廓不建立等级关系
    cv2.RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。
    cv2.RETR_TREE建立一个等级树结构的轮廓。

第三个参数method为轮廓的近似办法
    cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1
    cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息
    cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法

 

源码:

def box_detect():
    img = cv2.imread('1/input4w.jpg')
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    ret, binary = cv2.threshold(gray, 100, 150, cv2.THRESH_BINARY)  # 灰度阈值

    # 对binary去噪,腐蚀与膨胀
    binary = cv2.erode(binary, None, iterations=2)
    binary = cv2.dilate(binary, None, iterations=2)
    cv2.imwrite('temp_img/binary.jpg', binary)

    # contours是轮廓本身,hierarchy是每条轮廓对应的属性。
    # cv2.RETR_TREE建立一个等级树结构的轮廓。cv2.CHAIN_APPROX_SIMPLE矩形轮廓只需4个点来保存轮廓信息
    _, contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

    min_num = 250000
    max_num = 2700 * 4000
    for contour in contours[1:]:

        x, y, w, h = cv2.boundingRect(contour)  # 外接矩形

        if (w * h) > min_num:
            if (w * h) < max_num:
                out = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
                cv2.imwrite('temp_img/1-box.jpg', out)
                print('find box')

 

Python OpenCV 提供了许多图像增强、边缘检测和颜色分割的函数和算法,下面我介绍几个常用的方法: 1. 图像增强 - 直方图均衡化:通过增加图像的对比度,使得图像更加清晰,可以使用函数 `cv2.equalizeHist()` 实现。 ```python import cv2 img = cv2.imread('image.jpg', 0) equ = cv2.equalizeHist(img) cv2.imshow('Original Image', img) cv2.imshow('Equalized Image', equ) cv2.waitKey(0) cv2.destroyAllWindows() ``` - 锐化:通过增加图像的边缘和细节,使得图像更加清晰,可以使用函数 `cv2.filter2D()` 实现。 ```python import cv2 import numpy as np img = cv2.imread('image.jpg', 0) kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]]) sharp = cv2.filter2D(img, -1, kernel) cv2.imshow('Original Image', img) cv2.imshow('Sharpened Image', sharp) cv2.waitKey(0) cv2.destroyAllWindows() ``` 2. 边缘检测 - Canny 边缘检测:通过检测图像中的强度梯度来检测边缘,可以使用函数 `cv2.Canny()` 实现。 ```python import cv2 img = cv2.imread('image.jpg', 0) edges = cv2.Canny(img, 100, 200) cv2.imshow('Original Image', img) cv2.imshow('Canny Edges', edges) cv2.waitKey(0) cv2.destroyAllWindows() ``` 3. 颜色分割 - 色彩空间转换:将图像从 BGR 色彩空间转换为 HSV 色彩空间,可以使用函数 `cv2.cvtColor()` 实现。 ```python import cv2 img = cv2.imread('image.jpg') hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) cv2.imshow('Original Image', img) cv2.imshow('HSV Image', hsv) cv2.waitKey(0) cv2.destroyAllWindows() ``` - 阈值分割:将图像中的像素根据一定的阈值进行分类,可以使用函数 `cv2.threshold()` 实现。 ```python import cv2 img = cv2.imread('image.jpg', 0) ret, thresh = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY) cv2.imshow('Original Image', img) cv2.imshow('Thresholded Image', thresh) cv2.waitKey(0) cv2.destroyAllWindows() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值