OpenCV-图像处理知识积累(一):目标物体提取

每次做了什么东西很容易遗忘,希望能够坚持积累下去!!!

基本流程

  1. 以灰度图方式读取正确图像,将读取的灰度图像利用threshold()函数转变为二值图像;(0代表黑色,将像素值大于100的像素点设置像素值为255,为白色)
  2. 利用findContours()函数获取二值图像中物体的轮廓列表;
  3. 遍历轮廓列表,通过条件判断,查找到最大轮廓;
  4. 通过boundingRect()函数找出最大轮廓的定点坐标(x,y)及边长(w,h)
  5. 利用drawContours()函数绘制矩形包围框,设置红色框线;
  6. 最后通过img[y:y+h, x:x+w] 把目标图像从原图像中分割出来。

一、 cv2.treshold(src,tresh,maxval,type)函数

参数说明:src表示输入的图片, thresh表示阈值, maxval表示最大值, type表示阈值的类型

type的类型:

(1)cv2.THRESH_BINARY   表示阈值的二值化操作,大于阈值使用maxval表示,小于阈值使用0表示

(2)cv2.THRESH_BINARY_INV  表示阈值的二值化翻转操作,大于阈值的使用0表示,小于阈值的使用最大值表示

(3)cv2.THRESH_TRUNC    表示进行截断操作,大于阈值的使用阈值表示,小于阈值的

(4) cv2.THRESH_TOZERO   表示进

行化零操作,大于阈值的不变,小于阈值的使用

(5)v2.THRESH_TOZERO_INV  表示进行化零操作的翻转,大于阈值的使用0表示,小于阈值的不变

二、cv2.findContours()函数

参考:https://blog.csdn.net/yegeli/article/details/107414983?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242

讲解的很详细

三、cv2.boundingRect()函数

参考:https://blog.csdn.net/fu6543210/article/details/79935358

四、cv2.drawContours()函数

参考:https://blog.csdn.net/yegeli/article/details/107414983?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242

程序:

import cv2
import numpy as np
import os
root = "./no_noize"
file_list = os.listdir(root)
for filename in file_list:
    im1 = cv2.imread(root + "/" + filename, 0)
    # 对图像进行二值化,提取轮廓
    ret, binary = cv2.threshold(im1, 100, 255, cv2.THRESH_BINARY)
    contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
    # 找出最大轮廓
    # print(len(contours))
    max_local = 0
    for i in range(len(contours)):
        if contours[i].shape[0] > contours[max_local].shape[0]:
            max_local = i
    # 找出最大轮廓的定点及边长,绘制矩形包围框
    x, y, w, h = cv2.boundingRect(contours[max_local])
    im2 = cv2.imread(root + "/" + filename, 1)
    brcnt = np.array([[[x, y]], [[x + w, y]], [[x + w, y + h]],[[x, y + h]]])
    im_cnt = cv2.drawContours(im2,  # 绘制图像
                     [brcnt],  # 轮廓点列表
                     -1,  # 绘制全部轮廓
                     (0, 0, 255),  # 轮廓颜色:红色
                     2)  # 轮廓粗细

    cv2.imshow("result",im_cnt)
    cv2.waitKey()
    cv2.destroyAllWindows()
 

你可能感兴趣的:(OpenCV图像处理,opencv,计算机视觉,图像处理,算法)