复制
import cv2
import numpy as np
import copy
def RGB2HSI(rgb_img):
"""
这是将RGB彩色图像转化为HSI图像的函数
:param rgm_img: RGB彩色图像
:return: HSI图像
"""
row = rgb_img.shape[0]
col = rgb_img.shape[1]
hsi_img = rgb_img.copy()
B, G, R = cv2.split(rgb_img)
[B, G, R] = [i / 255.0 for i in ([B, G, R])]
H = np.zeros((row, col))
I = (R + G + B) / 3.0
S = np.zeros((row, col))
for i in range(row):
den = np.sqrt((R[i] - G[i]) ** 2 + (R[i] - B[i]) * (G[i] - B[i]))
thetha = np.arccos(0.5 * (R[i] - B[i] + R[i] - G[i]) / den)
h = np.zeros(col)
h[B[i] <= G[i]] = thetha[B[i] <= G[i]]
h[G[i] < B[i]] = 2 * np.pi - thetha[G[i] < B[i]]
h[den == 0] = 0
H[i] = h / (2 * np.pi)
for i in range(row):
min = []
for j in range(col):
arr = [B[i][j], G[i][j], R[i][j]]
min.append(np.min(arr))
min = np.array(min)
S[i] = 1 - min * 3 / (R[i] + B[i] + G[i])
S[i][R[i] + B[i] + G[i] == 0] = 0
hsi_img[:, :, 0] = H * 255
hsi_img[:, :, 1] = S * 255
hsi_img[:, :, 2] = I * 255
return hsi_img
def HSI2RGB(hsi_img):
"""
这是将HSI图像转化为RGB图像的函数
:param hsi_img: HSI彩色图像
:return: RGB图像
"""
row = np.shape(hsi_img)[0]
col = np.shape(hsi_img)[1]
rgb_img = hsi_img.copy()
H, S, I = cv2.split(hsi_img)
[H, S, I] = [i / 255.0 for i in ([H, S, I])]
R, G, B = H, S, I
for i in range(row):
h = H[i] * 2 * np.pi
a1 = h >= 0
a2 = h < 2 * np.pi / 3
a = a1 & a2
tmp = np.cos(np.pi / 3 - h)
b = I[i] * (1 - S[i])
r = I[i] * (1 + S[i] * np.cos(h) / tmp)
g = 3 * I[i] - r - b
B[i][a] = b[a]
R[i][a] = r[a]
G[i][a] = g[a]
a1 = h >= 2 * np.pi / 3
a2 = h < 4 * np.pi / 3
a = a1 & a2
tmp = np.cos(np.pi - h)
r = I[i] * (1 - S[i])
g = I[i] * (1 + S[i] * np.cos(h - 2 * np.pi / 3) / tmp)
b = 3 * I[i] - r - g
R[i][a] = r[a]
G[i][a] = g[a]
B[i][a] = b[a]
a1 = h >= 4 * np.pi / 3
a2 = h < 2 * np.pi
a = a1 & a2
tmp = np.cos(5 * np.pi / 3 - h)
g = I[i] * (1 - S[i])
b = I[i] * (1 + S[i] * np.cos(h - 4 * np.pi / 3) / tmp)
r = 3 * I[i] - g - b
B[i][a] = b[a]
G[i][a] = g[a]
R[i][a] = r[a]
rgb_img[:, :, 0] = B * 255
rgb_img[:, :, 1] = G * 255
rgb_img[:, :, 2] = R * 255
return rgb_img
def classify(ll, distance):
ll.sort()
new = list()
j = 0
i = 1
while i < len(ll):
if ll[i] - ll[j] <= distance:
i = i + 1
if i == len(ll):
new.append(ll[j:])
else:
new.append(ll[j:i])
j = copy.deepcopy(i)
i += 1
return new
def eraseline(rgb_img, near_pixel=3):
hsi_img = RGB2HSI(rgb_img)
d = dict()
s = set()
for x in range(hsi_img.shape[0]):
for y in range(hsi_img.shape[1]):
s.add(hsi_img[x, y, 0])
for each in s:
d[each] = list()
for x in range(hsi_img.shape[0]):
for y in range(hsi_img.shape[1]):
d[hsi_img[x, y, 0]].append((x, y))
fenlei_list = classify(list(d.keys()), near_pixel)
fenlei_cord_dict = dict()
fenlei_len_list = list()
for i, colorlist in enumerate(fenlei_list):
fenlei_cord_dict[i] = list()
for color in colorlist:
fenlei_cord_dict[i] += d[color]
fenlei_len_list.append((i, len(fenlei_cord_dict[i])))
fenlei_len_list = sorted(fenlei_len_list, key=lambda x: x[1])
newimg = np.full(rgb_img.shape, 255, dtype='uint8')
for cctuple in fenlei_len_list[-5:-1]:
for cccord in fenlei_cord_dict[cctuple[0]]:
newimg[cccord[0], cccord[1], 0] = rgb_img[cccord[0], cccord[1], 0]
newimg[cccord[0], cccord[1], 1] = rgb_img[cccord[0], cccord[1], 1]
newimg[cccord[0], cccord[1], 2] = rgb_img[cccord[0], cccord[1], 2]
return newimg
if __name__ == '__main__':
file = 'img_1.png'
rgb_img = cv2.imread(file, cv2.IMREAD_COLOR)
rgb_img_no_line = eraseline(rgb_img)
cv2.imwrite('after.jpg', rgb_img_no_line)```
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2020-11-25 python去除(京东,抖音,小红书等等)视频水印
2019-11-25 python-Redis模块常用的方法汇总
2019-11-25 python-execjs(调用js)
2019-11-25 爬取豆瓣电影排名的代码以及思路