参考链接: 使用OpenCV在Python中进行图像处理

使用OpenCV截取目标区域

关于灰度图二值化:https://blog.csdn.net/sinat_21258931/article/details/61418681

#encoding:utf-8

import cv2

import numpy as np

def get_image(path):       #获取图片

img=cv2.imread(path)

gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

return img, gray

def Gaussian_Blur(gray):    # 高斯去噪(去除图像中的噪点)

"""

高斯模糊本质上是低通滤波器:

输出图像的每个像素点是原图像上对应像素点与周围像素点的加权和

高斯矩阵的尺寸和标准差:

(9, 9)表示高斯矩阵的长与宽,标准差取0时OpenCV会根据高斯矩阵的尺寸自己计算。

高斯矩阵的尺寸越大,标准差越大,处理过的图像模糊程度越大。

"""

blurred = cv2.GaussianBlur(gray, (9, 9),0)

return blurred

def Sobel_gradient(blurred):

"""

索比尔算子来计算x、y方向梯度

关于算子请查看:https://blog.csdn.net/wsp_1138886114/article/details/81368890

"""

gradX = cv2.Sobel(blurred, ddepth=cv2.CV_32F, dx=1, dy=0)

gradY = cv2.Sobel(blurred, ddepth=cv2.CV_32F, dx=0, dy=1)

gradient = cv2.subtract(gradX, gradY)

gradient = cv2.convertScaleAbs(gradient)

return gradX, gradY, gradient

def Thresh_and_blur(gradient):  #设定阈值

blurred = cv2.GaussianBlur(gradient, (9, 9),0)

(_, thresh) = cv2.threshold(blurred, 90, 255, cv2.THRESH_BINARY)

"""

cv2.threshold(src,thresh,maxval,type[,dst])->retval,dst (二元值的灰度图)

src:  一般输入灰度图

thresh:阈值,

maxval:在二元阈值THRESH_BINARY和

逆二元阈值THRESH_BINARY_INV中使用的最大值

type:  使用的阈值类型

返回值  retval其实就是阈值

"""

return thresh

def image_morphology(thresh):

"""

建立一个椭圆核函数

执行图像形态学, 细节直接查文档,很简单

"""

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (25, 25))

closed = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)

closed = cv2.erode(closed, None, iterations=4)

closed = cv2.dilate(closed, None, iterations=4)

return closed

def findcnts_and_box_point(closed):

# 这里opencv3返回的是三个参数

(_, cnts, _) = cv2.findContours(closed.copy(),

cv2.RETR_LIST,

cv2.CHAIN_APPROX_SIMPLE)

c = sorted(cnts, key=cv2.contourArea, reverse=True)[0]

# 计算最大轮廓的旋转包围盒

rect = cv2.minAreaRect(c)

box = np.int0(cv2.boxPoints(rect))

return box

def drawcnts_and_cut(original_img, box): #目标图像裁剪

# 因为这个函数有极强的破坏性,所有需要在img.copy()上画

draw_img = cv2.drawContours(original_img.copy(), [box], -1, (0, 0, 255), 3)

Xs = [i[0] for i in box]

Ys = [i[1] for i in box]

x1 = min(Xs)

x2 = max(Xs)

y1 = min(Ys)

y2 = max(Ys)

hight = y2 - y1

width = x2 - x1

crop_img = original_img[y1:y1+hight, x1:x1+width]

return draw_img, crop_img

def walk():

img_path = r'./2010.png'

save_path = r'./cat_save.png'

original_img, gray = get_image(img_path)

blurred = Gaussian_Blur(gray)

gradX, gradY, gradient = Sobel_gradient(blurred)

thresh = Thresh_and_blur(gradient)

closed = image_morphology(thresh)

box = findcnts_and_box_point(closed)

draw_img, crop_img = drawcnts_and_cut(original_img,box)

# 暴力一点,把它们都显示出来看看

cv2.imshow('original_img', original_img)

cv2.imshow('GaussianBlur', blurred)

cv2.imshow('gradX', gradX)

cv2.imshow('gradY', gradY)

cv2.imshow('final', gradient)

cv2.imshow('thresh', thresh)

cv2.imshow('closed', closed)

cv2.imshow('draw_img', draw_img)

cv2.imshow('crop_img', crop_img)

cv2.waitKey(20171219)

cv2.imwrite(save_path, crop_img)

walk()

执行效果

特别鸣谢 https://blog.csdn.net/sinat_36458870/article/details/78825571

[转载] OpenCV—Python目标区域图像分割相关推荐

  1. python opencv实现目标区域裁剪

    这个任务是自己在项目中数据处理的一部分内容,待处理的图片如下所示: 我需要将目标区域给裁剪出来,要不然在后期训练网络的时候整幅图像过大,且目标区域过小,得到结果不好,还会加剧计算量.在网上找了各个大佬 ...

  2. 机器视觉 OpenCV—python目标跟踪(光流)

    文章目录 一.运动检测 1.1 检测思路 1.2 代码 二.运动方向预测 2.1 关键点(角点)追踪 goodFeaturesToTrack() 2.2 光流法 一.运动检测 1.1 检测思路 目标跟 ...

  3. 【毕业设计】深度学习卫星遥感图像检测与识别 -opencv python 目标检测

    文章目录 0 前言 1 课题背景 2 实现效果 3 Yolov5算法 4 数据处理和训练 5 最后 0 前言

  4. Object Tracking using OpenCV (C++/Python)(使用OpenCV进行目标跟踪)

    本博客翻译搬运自https://www.learnopencv.com/object-tracking-using-opencv-cpp-python,用于初入目标跟踪的新手学习,转贴请注明! 使用O ...

  5. Python+Opencv身份证号码区域提取及识别实现

    前端时间智能信息处理实训,我选择的课题为身份证号码识别,对中华人民共和国公民身份证进行识别,提取并识别其中的身份证号码,将身份证号码识别为字符串的形式输出.现在实训结束了将代码发布出来供大家参考,识别 ...

  6. (OpenCV+Python)--图片局部区域像素值处理(改进版)

    上一个版本看这里:<Python+OpenCV实现[图片]局部区域像素值处理> 上个版本的代码虽然实现了我需要的功能,但还是走了很多弯路,我意识到图片本就是数组形式,对于8位灰度图,通道数 ...

  7. python目标检测与识别_Python 使用Opencv实现目标检测与识别的示例代码

    在上章节讲述到图像特征检测与匹配 ,本章节是讲述目标检测与识别.后者是在前者的基础上进一步完善. 在本章中,我们使用HOG算法,HOG和SIFT.SURF同属一种类型的描述符.功能代码如下: impo ...

  8. python二值化 感兴趣区域_Python+OpenCV感兴趣区域ROI提取方法

    方法一:使用轮廓 步骤1 """src为原图""" ROI = np.zeros(src.shape, np.uint8) #感兴趣区域RO ...

  9. python数据挖掘视频_python+opencv实时视频目标检测

    python+opencv实时视频目标检测 opencv环境 1.访问Python Extension Packages for Windows,下载python对应版本的opencv. 比如小编下载 ...

最新文章

  1. 2345电脑管家_极限挑战:同时安装4大国产杀毒软件,我的电脑是最安全的?
  2. John the Ripper
  3. BZOJ 1079: [SCOI2008]着色方案 记忆化搜索
  4. 黑马程序员_java基础笔记(15)...银行业务调度系统_编码思路及代码
  5. 通过aws部署推荐系统_通过AWS Elastic Beanstalk轻松进行Spring Boot部署
  6. 在Hadoop集群上,搭建HBase集群
  7. 带进度条的文件复制。
  8. textarea输入区域设置输入文字字数的最大个数
  9. 2017 ICPC西安区域赛 A - XOR (线段树并线性基)
  10. 【PyCharm】Pycharm使用技巧
  11. C++函数重载与引用的较好的练习实例
  12. 安装php_sqlsrv扩展
  13. VM14 启动Ubutun16.04 黑屏,实用解决办法
  14. Nachos操作系统实习-lab1
  15. CDA学习笔记-指标
  16. Akka默认20s超时修改配置
  17. Python | Numpy:详解计算矩阵的均值和标准差
  18. Edge浏览器Alt+Tab快捷键切换其他应用窗口
  19. 数据库的完全依赖,部分依赖和传递依赖
  20. html5 localstorage 生命周期,cookie、localStorage和sessionStorage 三者之间的区别以及存储、获取、删除等使用方式...

热门文章

  1. layer 父弹出框上弹出子弹框窗体大小问题
  2. 【2021牛客暑期多校训练营4】Average (二分答案,区间/子数组最大平均值,)
  3. linux杀死网络,Linux下kill杀死进程详解
  4. LC415字符串相加
  5. npm设置仓库register
  6. 计算机网络—SR选择重传协议
  7. H.265编码和H.264编码的区别
  8. bzoj 4522: [Cqoi2016]密钥破解
  9. 循环矩阵的快速幂(bzoj 2510: 弱题)
  10. 后缀数组(bzoj 1031: [JSOI2007]字符加密Cipher)