当前位置: 首页 > news >正文

数据预处理之图像去空白

数据预处理之图像去空白

  • 图像去空白
    • 介绍
    • 方法
    • 边缘检测
    • 阈值处理
    • 形态学图像剪切

图像去空白

介绍

图像去空白是指在图像处理中去除图像中的空白区域的过程。空白区域通常是指图像中的白色或其他颜色,其不包含有用的信息。去空白的目的是为了节省存储空间、提高图像处理速度、改善图像质量等。

去空白的方法有很多,其中一些常见的方法包括边缘检测、阈值处理、图像剪切和形态学处理。每种方法都有其特定的优势和局限性,因此通常需要结合使用多种方法,以便获得最佳效果。

举个例子,假设有一张图片,其中有一个大的白色区域,我们可以使用阈值处理的方法将其转换为黑白图像,然后使用形态学处理的方法去除其中的白色像素,最终得到一张只包含有用信息的图像。

方法

下面是几种常见的图像去空白方法:

  1. 边缘检测:通过检测图像中的边缘来去除空白区域。例如,使用 Canny 边缘检测算法或膨胀腐蚀算法。
  2. 阈值处理:通过设置图像中像素值的阈值来去除空白区域。例如,使用二值化算法。
  3. 图像剪切:通过计算图像中非空白像素的边界,并仅保留其中的图像。
  4. 形态学处理:通过使用形态学操作,例如腐蚀和膨胀,来去除空白区域。

这些方法的选择取决于图像的质量、内容和需求。通常,多种方法需要结合使用,以便获得最佳效果。

边缘检测

边缘检测是一种常见的图像去空白方法。该方法通过检测图像中的边缘,从而确定图像的有效区域。

步骤如下:

  1. 对图像进行预处理,将其转换为灰度图像。
  2. 使用滤波器对图像进行模糊处理,以减少图像中的噪声。
  3. 使用边缘检测算法,如Canny算法、Sobel算法等,在图像上检测边缘。
  4. 对检测到的边缘进行处理,以确定有效区域。
  5. 将有效区域从图像中剪切出来,得到一张去空白后的图像。

注意:边缘检测方法不一定适用于所有图像,因此需要对不同的图像进行试验,以确定最佳的边缘检测算法和参数。

import cv2
import numpy as np# 读取图像
img = cv2.imread("input.jpg")# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 使用Canny边缘检测算法
edges = cv2.Canny(gray, 50, 150)# 寻找轮廓
contours, hierarchy = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 确定有效区域
x, y, w, h = cv2.boundingRect(contours[0])# 将有效区域从图像中剪切出来
cropped = img[y:y + h, x:x + w]# 保存去空白后的图像
cv2.imwrite("output.jpg", cropped)

阈值处理

import cv2
import numpy as np# 读取图像
img = cv2.imread("input.jpg")# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 阈值处理
_, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)# 寻找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 确定有效区域
x, y, w, h = cv2.boundingRect(contours[0])# 将有效区域从图像中剪切出来
cropped = img[y:y + h, x:x + w]# 保存去空白后的图像
cv2.imwrite("output.jpg", cropped)

形态学图像剪切

目前来说最有用

import numpy as np
import cv2img = cv2.imread('data/3.jpg')
img = img[:-5,:-5] 
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = 255*(gray < 128).astype(np.uint8)
gray = cv2.morphologyEx(gray, cv2.MORPH_OPEN, np.ones((2, 2), dtype=np.uint8))
coords = cv2.findNonZero(gray)
x, y, w, h = cv2.boundingRect(coords)
rect = img[y:y+h, x:x+w] 
cv2.imwrite("Output.jpg", rect)
http://www.lryc.cn/news/209.html

相关文章:

  • 真的麻了,别再为难软件测试员了......
  • 2月9日,30秒知全网,精选7个热点
  • 球面坐标系下的三重积分
  • 谷歌 Jason Wei | AI 研究的 4 项基本技能
  • excel数据整理:合并计算快速查看人员变动
  • vit-pytorch实现 MobileViT注意力可视化
  • Python将字典转换为csv
  • EasyX精准帧率控制打气球小游戏
  • 你知道 GO 中什么情况会变量逃逸吗?
  • 一篇文章学懂C++和指针与链表
  • TPGS-cisplatin顺铂修饰维生素E聚乙二醇1000琥珀酸酯
  • 【20230206-0209】哈希表小结
  • c++11 标准模板(STL)(std::multimap)(一)
  • python进阶——自动驾驶寻找车道
  • 男,26岁,做了一年多的自动化测试,最近在纠结要不要转行,求指点。?
  • 源码级别的讲解JAVA 中的CAS
  • JUC锁与AQS技术【我的Android开发技术】
  • 【问题代码】顺序点的深入理解(汇编剖析+手画图解)
  • BinaryAI全新代码匹配模型BAI-2.0上线,“大模型”时代的安全实践
  • nvidia设置wifi和接口
  • PostgreSQL 变化数据捕捉(CDC)
  • Spring 事务【隔离级别与传播机制】
  • HTTP和HTTPS协议
  • day3——有关java运算符的笔记
  • Git多人协同远程开发
  • Chapter4:机器人仿真
  • python(14)--集合
  • 【Spark分布式内存计算框架——Spark Core】4. RDD函数(中)Transformation函数、Action函数
  • Mysql 数据类型
  • 运行Whisper笔记(1)