OpenCV按指定大小分割图像并保存详细讲解

这篇具有很好参考价值的文章主要介绍了OpenCV按指定大小分割图像并保存详细讲解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这几天在忙着整理自己的数据集,使用工业级相机拍了好多高清照片,但是模型训练的时候需要使用512*512像素点大小的图像,而且我的模型设计的时候就已经规定好了训练样本大小。
那就分割呗,把拍的照片按512*512分割一小块一小块的,然后打标签,喂模型进行训练。

一、单张图像按指定需求进行分割

思路:首先给定图片的位置picture_path,然后指定要保存的位置picture_save_pathpicture_name为了后续保存分割图像命名方便,就按原名称_数字进行命名,例如原名称a1.TIF,分割之后存放的名称为a1_1_1.jpga1_1_2.jpg以此类推

target_width、target_high、target_channel 设定需要分割的宽高通道数,我这边数据集是彩色的需要512*512像素的数据集,故设置成target_width = 512 target_high = 512 target_channel = 3

然后读取图片picture = cv2.imread(picture_path)
看下图片的宽高通道数信息print(picture.shape),我这里是(4024, 6048, 3) ,这是OpenCV的imread()方法,返回的结果类型为[H,W,C],跟Pytorch还不一样,家人们需要注意下
然后把图片的H、W、C信息给取出来

因为需要一块一块的分割,其实就是一点一点的移动而已
H_number = int(H/target_high) W_number = int(W/target_width)看下能分割几个,H是图片实际的高度,target_high为
需要分割的小块高度,比如我这个原图H是4024,我需要分割成512高度的图像target_high=512,然后H_number = 4024/512 = 7.859375,然后取整H_number=7;同理W也是一样的操作

然后就是循环呗,每行每行进行分割
mask = picture[i*target_width:(i+1)*target_width, j*target_high:(j+1)*target_high, :],这里的picture[W,H,C],使用切片操作就行,宽度从[i*target_width:(i+1)*target_width],其实就是一小块一小块的进行移动而已,同理高度也是 j*target_high:(j+1)*target_high:颜色通道就不动了,多少还是多少;最终mask就是一块所需要的大小图片,然后就是保存

save_picture = picture_save_path + picture_name + "_{}_{}.jpg".format(i+1,j+1),指定要保存的位置路径和命名,最后想保存什么格式把.jpg改一下就行

cv2.imwrite(save_picture,mask),最后保存一下即可

完整代码

import cv2

picture_name = "a1"
picture_path = "E:/sample/a1.TIF"
picture_save_path = "E:/result/"

target_width = 512
target_high = 512
target_channel = 3

picture = cv2.imread(picture_path)
print(picture.shape)# (4024, 6048, 3) [H,W,C]

H = picture.shape[0]
W = picture.shape[1]
C = picture.shape[2]

H_number = int(H/target_high)
W_number = int(W/target_width)
C_number = C
print("H_number is:",H_number)
print("W_number is:",W_number)

for i in range(0, H_number):
    for j in range(0, W_number):
        mask = picture[i*target_width:(i+1)*target_width, j*target_high:(j+1)*target_high, :]
        save_picture = picture_save_path + picture_name + "_{}_{}.jpg".format(i+1,j+1)
        cv2.imwrite(save_picture,mask)

print("okk")

OpenCV按指定大小分割图像并保存详细讲解
可分为7*11=77张小图

效果展示

图片位置
OpenCV按指定大小分割图像并保存详细讲解

分割位置
OpenCV按指定大小分割图像并保存详细讲解

二、批量分割图像

我拍了差不多一百来张照片,然后对这些样本进行批处理分割
首先我先对这些照片进行了重命名,可参考博文:对批量文件重命名

拿到这34个样本
OpenCV按指定大小分割图像并保存详细讲解

然后开始对这些图像进行批处理分割
和上面的操作差不多,只不过多了个os读取批量获取文件名称和路径而已

picture_path图像的路径
picture_save_path批处理之后要保存的路径

for filename in os.listdir(picture_path):通过os.listdir(),获得每个照片的名称filename
picture_absolute_path = picture_path + filename路径+名称,得到每张图片的绝对路径picture_absolute_path
picture_name,picture_suffix = os.path.splitext(picture_allname),将照片的名称picture_name和后缀picture_suffix 分离
only_path = os.path.dirname(picture_absolute_path),获取图像的单纯路径,不包括图像名称
后续的操作就和处理单张图像一样了

完整代码

import cv2
import os

picture_path = r"E:/sample/"
picture_save_path = r"E:/result/"
target_width = 512
target_high = 512
target_channel = 3

for filename in os.listdir(picture_path):
    
    picture_absolute_path = picture_path + filename # E:/sample/14-04-2023-16-37-45.TIF
    picture_allname = os.path.basename(picture_absolute_path) # 14-04-2023-16-37-45.TIF
    picture_name,picture_suffix = os.path.splitext(picture_allname)
    only_path = os.path.dirname(picture_absolute_path) # E:/sample
    # picture_name   14-04-2023-16-37-45
    # picture_suffix  .TIF
    #print(picture_name) # 14-04-2023-16-37-45
    
    
    picture = cv2.imread(picture_absolute_path)
    #print(picture.shape)
    H = picture.shape[0]
    W = picture.shape[1]
    C = picture.shape[2]
    H_number = int(H/target_high)
    W_number = int(W/target_width)
    C_number = C
    
    for i in range(0, H_number):
        for j in range(0, W_number):
            mask = picture[i*target_width:(i+1)*target_width, j*target_high:(j+1)*target_high, :]
            save_picture = picture_save_path + picture_name + "_{}_{}.jpg".format(i+1,j+1)
            cv2.imwrite(save_picture,mask)    

    print(filename + " is okk")    

print("finished!!!")          

效果展示

单张图片可分割成7 * 11 = 77
一共34张,故总共可以分为77 * 34 = 2618
OpenCV按指定大小分割图像并保存详细讲解
OpenCV按指定大小分割图像并保存详细讲解文章来源地址https://www.toymoban.com/news/detail-418848.html

到了这里,关于OpenCV按指定大小分割图像并保存详细讲解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 图像分割UNet (1) : 网络结构讲解

    UNet 论文:Convolutional Networks for Biomedical Image Segmentation 这篇论文主要是针对生物医学影像这个领域提出的,所以一提到UNet一般都会联想到医学影像。 UNet它是一个encoder - decoder的结构,那么encoder对应就是这个u型网络左边这半部分,也就是我们特征提取及下采样这部分。decode

    2024年02月07日
    浏览(64)
  • 图像分割简单介绍,并给出opencv图像分割的示例代码

    图像分割是计算机视觉中的一项重要任务,其目标是将图像中的对象与背景进行分离,或将图像分割成不同的区域。本教程将介绍图像分割的基本概念和方法,以及如何在实践中应用它们。 什么是图像分割? 图像分割方法 实践:使用Python和OpenCV进行图像分割 总结及拓展阅读

    2024年02月09日
    浏览(34)
  • OpenCV图像处理-图像分割-MeanShift

    MeanShift严格说来并不是用来对图像进行分割的,而是在色彩层面的平滑滤波。它会中和色彩分布相近的颜色,平滑色彩细节,侵蚀掉面积较小的的颜色区域,它以图像上任意一点P为圆心,半径为sp,色彩幅值为sr进行不断地迭代。 语法:pyrMeanShiftFiltering(img, double sp, double sr,

    2024年02月16日
    浏览(29)
  • 【Opencv】图像分割——区域生长

    Python 3.8.8 PyCharm 2021 opencv-python   区域生长的基本思想是将具有相似性质的像素集合起来构成区域。具体先对每个需要分割的区域找一个种子像素作为生长的起点,然后将种子像素周围邻域中与种子像素具有相同或相似性质的像素(根据某种事先确定的生长或相似准则来判定

    2024年02月05日
    浏览(31)
  • OpenCV(三)——图像分割(三)

    目录 6.区域生长算法 6.1 区域生长概要 6.2 区域生长原理 7.分水岭算法

    2024年02月13日
    浏览(26)
  • OpenCV(三)——图像分割

    目录 1.图像分割 2.固定阈值法——直方图双峰法 3.自动阈值法 3.1 自适应阈值法

    2024年02月03日
    浏览(43)
  • OpenCV(加载、修改、保存图像)

    目录 1、图像加载 2、显示图像 3、修改图像 4、图像保存 OpenCV官方文档查询地址:OpenCV: OpenCV modules  加载图像(用cv::imread ) imread 功能是加载图像文件成为一个Mat对象,其中第一个参数表示图像文件名称 第二个参数,表示加载的图像是什么类型,支持常见的三个参数值: I

    2024年02月12日
    浏览(33)
  • 【图像分割】Unet系列深度讲解(FCN、UNET、UNET++)

    1.1 背景介绍: 自2015年以来,在生物医学图像分割领域,U-Net得到了广泛的应用,目前已达到四千多次引用。至今,U-Net已经有了很多变体。目前已有许多新的卷积神经网络设计方式,但很多仍延续了U-Net的核心思想,加入了新的模块或者融入其他设计理念。 编码和解码,早在

    2024年02月03日
    浏览(31)
  • OPENCV--实现meanshift图像分割

    2024年02月08日
    浏览(32)
  • 用OpenCV进行传统图像分割

    欢迎回来,我的图像处理爱好者们!本文我们将直接进入传统图像分析的新领域——图像分割,这是指将图像分成若干具有相似性质的区域的过程,从数学角度来看,图像分割是将图像划分成互不相交的区域的过程。 闲话少说,我们直接开始吧! 首先介绍的是基于阈值和基

    2024年02月12日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包