Python截取图片区域并保存03

这篇具有很好参考价值的文章主要介绍了Python截取图片区域并保存03。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

Python + OpenCV图片基本操作02

目录

系列文章目录

前言

一、获取感兴趣图片坐标

二、剪切图片坐标区域并保存图片

总结

前言

提供一张图片,如何截剪其中的某一部分的区域?

我的思路是分两步:

1. 找到要裁剪区域的坐标

2. 根据图片坐标进行剪切,并保存

一、获取感兴趣图片坐标

import cv2
from PIL import Image


def getCoordinate(img):
    rectangle = []
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)        # 灰度图
    ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY|cv2.THRESH_OTSU)    # 二值化

    element3 = cv2.getStructuringElement(cv2.MORPH_RECT, (8, 8))    # 设置膨胀和腐蚀操作
    dilation = cv2.dilate(binary, element3, iterations=1)   # 膨胀一次,让轮廓突出
    contours, hierarchy = cv2.findContours(dilation, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_TC89_L1)  # 检测轮廓
    cv2.drawContours(img, contours, -1, (0, 0, 255), 3)  # 参数值为1, 给contours[1]绘制轮廓。 -1: 给所有的contours绘制轮廓
    cv2.imshow("img", img)
    cv2.waitKey()

    for contour in contours:
        x, y, w, h = cv2.boundingRect(contour)
        rectangle.append((x, y, x + w, y + h))
    print(f'rectangle: {rectangle}')
    return rectangle


if __name__ == '__main__':
    imgPath = 'D:\\img.bmp'
    img = cv2.imread(imgPath)
    # 保存
    getCoordinate(img)

二、剪切图片坐标区域并保存图片

import cv2
from PIL import Image


def savePic(rectangle):
    for i in range(len(rectangle)):
        imgPath = "D:\\PythonWork\\Contour\\Photos\\" + str(i+1) + ".PNG"  #notes: 图片的扩展名要一致
        im = Image.open(defaultImgPath)
        im = im.crop(rectangle[i])  # 对图片进行切割 im.crop(top_x, top_y, bottom_x, bottom_y)
        im.save(imgPath)


if __name__ == '__main__':
    defaultImgPath = 'D:\\test.PNG'
    img = cv2.imread(defaultImgPath)
    # 保存图片,getCoordinate()可以查看上一步中的源码
    coordinateValue = getCoordinate(img)
    savePic(coordinateValue)

1. getCoordinate()可以查看一、获取感兴趣图片坐标中的源码

2. 如果指定某一区域坐标,main主函数如下:

if __name__ == '__main__':
    rnt = [(46, 28, 101, 61)]
    savePic(rnt)

总结

1. cv2.COLOR_BGR2GRAY 将BGR格式转换成灰度图片     灰度图片并不是指常规意义上的黑白图片,只用看是不是无符号八位整型(unit8)

2. ret,dst = cv2.threshold(src,thresh,maxval,type)    #返回的第一个参数为阈值,第二个为结果图像

3. cv2.threshold(dilation, 0, 255, cv2.THRESH_BINARY)    #二值化     将灰度图dilation中灰度值小于0的点置0,灰度值大于255的点置255

4. cv2.getStructuringElement(shape, ksize)     

cv2.getStructuringElement(cv2.MORPH_RECT, (8, 8))     #设置膨胀和腐蚀操作的核函数

cv2.MORPH_RECT: 矩形结构元素,所有元素值都是1       ksize:代表形状元素的大小

5. cv2.dilate(binary, element3, iterations=1)    #膨胀一次,让轮廓突出

6. cv2.findContours()函数接受的参数为二值图,即黑白的(不是灰度图),所以读取的图像要先转成灰度的,再转成二值图

cv2.findContours(dilation, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_TC89_L1)    #查找轮廓  

cv2.RETR_EXTERNAL 表示只检测外轮廓     

cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS 使用teh-Chinl chain 近似算法   

cv2.findContours()函数返回两个值,一个是轮廓本身,还有一个是每条轮廓对应的属性。

contours返回值:cv2.findContours()函数首先返回一个list,list中每个元素都是图像中的一个轮廓,用numpy中的ndarray表示。可以通过len(contours)知道返回的轮廓。

7. cv2.boundingRect(contour):矩形边框(Bounding Rectangle)是说,用一个最小的矩形,把找到的形状包起来。文章来源地址https://www.toymoban.com/news/detail-480762.html

到了这里,关于Python截取图片区域并保存03的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot(JavaCV )实现视频截取第N帧并保存图片

    springboot(JavaCV )实现视频截取第N帧并保存图片 现在视频网站展示列表都是用img标签展示的,动图用的是gif,但是我们上传视频时并没有视屏封面,就这需要上传到服务器时自动生成封面并保存 本博客使用jar包的方式实现上传视频文件并且截取视频第一帧,保存到阿里云的

    2024年02月12日
    浏览(42)
  • Matlab/Python教程系列 | 根据目录下的已有图片制作视频(动画)

    注1:本文系“MATLAB/Python编程教程”系列之一,致力于使用Python和Matlab实现特定的功能。本次要实现的功能是:根据目录下的已有图片制作视频(动画)。 在这个教程中,我们将一起学习如何使用MATLAB和Python编程语言,根据目录下的已有图片制作视频(动画)。我们将从头开始,逐

    2024年02月09日
    浏览(29)
  • Python爬虫之Scrapy框架系列(21)——重写媒体管道类实现保存图片名字自定义及多页爬取

    spider文件中要拿到图片列表并yield item; item里需要定义特殊的字段名:image_urls=scrapy.Field(); settings里设置IMAGES_STORE存储路径,如果路径不存在,系统会帮助我们创建; 使用默认管道则在s

    2024年02月10日
    浏览(36)
  • vscode 系列文章目录 - ctrl+鼠标左键无效

    vscode 中有时会遇到 “Alt + 鼠标点击” 有效,但 “Ctrl + 鼠标点击” 无效,这时可以通过 Ctrl + , 进行系统配置。 进入VScode的首选项,选择设置(快捷键 Ctrl + , ),输入Go to definition,找到如下两个设置。 Editor: Multi Cursor Modifier 设置成 alt “editor.gotoLocation.multipleDefinitions” 设置

    2024年04月23日
    浏览(40)
  • 【vim 学习系列文章 5 - cscope 过滤掉某些目录】

    上篇文章:【vim 学习系列文章 4 - vim与系统剪切板之间的交互】 下篇文章:【vim 学习系列文章 6 – vim 如何从上次退出的位置打开文件】 第一步 创建自己的 cscope 脚本 ~/.local/bin/cscope.sh ,如下: 我的这个脚本首先去区分当前执行 cscope 命令的目录是 rt-thread 目录还是 linux 目

    2024年02月12日
    浏览(73)
  • 【CV大模型SAM(Segment-Anything)】如何保存分割后的对象mask?并提取mask对应的图片区域?

    上一篇文章【CV大模型SAM(Segment-Anything)】真是太强大了,分割一切的SAM大模型使用方法:可通过不同的提示得到想要的分割目标中 详细介绍了大模型SAM(Segment-Anything)的不同使用方法 ,后面有很多小伙伴给我留言问我分割后的目标对象如何保存,这篇介绍一下分割后的ma

    2024年02月09日
    浏览(37)
  • Git系列文章目录 - Git 子模块git submodule使用

    项目中有时会遇到会涉及子模块的使用,比如 flatpak 项目包含多个子模块。 进入需要添加子模块的目录,一般是项目根目录。 删除子模块目录及源码: 删除项目目录下.gitmodules文件中子模块相关条目: 删除配置项中子模块相关条目: 删除模块下的子模块目录: 清除子模块

    2024年01月20日
    浏览(41)
  • Python 结合opencv实现图片截取和拼接

    python 3.6.2 scikit-build-0.16.7 win10 opencv_python-4.5.4.60-cp36-cp36m-win_amd64.whl 下载地址: https://pypi.org/project/opencv-python/4.5.4.60/#files https://files.pythonhosted.org/packages/57/6c/7f4f56b2555d5c25dd4f41fc72a16dc6402cb2b4f967da11d8d26c669b55/opencv_python-4.5.4.60-cp36-cp36m-win_amd64.whl 注意:下载时不用下abi版的,比如 o

    2024年02月08日
    浏览(33)
  • wps js宏获取工作簿、工作表、单元格的值、链接转图片、单元格区域数据转二维数组、保存工作簿的常用Excel操作

             首先说明js宏的全称是JavaScript for WPS,JavaScript语言可以简称js,通过名称知道js宏的本质是用JS语言调用WPS提供的Application对象模型,要求必须有js基础,跳过js直接学js宏会走很多弯路!!!         本篇介绍js操作Excel对象模型的常用方法,助你从vba转战js,这

    2024年02月12日
    浏览(39)
  • AIGC系列文章目录 第一章 AIGC 与AI对话,如何写好prompt?

    生成式人工智能AIGC(Artificial Intelligence Generated Content)是人工智能1.0时代进入2.0时代的重要标志。 AIGC对于人类社会、人工智能的意义是里程碑式的。 短期来看 AIGC改变了基础的生产力工具, 中期来看 会改变社会的生产关系, 长期来看 促使整个社会生产力发生质的突破,在

    2024年02月06日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包