python如何批量将图片转成线稿图?


网友回复
有三种不同的方法,从最简单经典的方法到更具艺术感的方法。
首先,请确保您已经安装了必要的库。如果尚未安装,请打开终端或命令提示符运行:
pip install opencv-python numpy matplotlib
opencv-python: 核心的图像处理库。
numpy: OpenCV 依赖它进行高效的数组运算。
matplotlib: 用于方便地在脚本中展示处理前后的图片。
方法一:经典边缘检测法 (Canny Edge Detection)
这是最基础、最直接的方法。它的原理是找出图像中亮度变化剧烈的区域,即“边缘”,然后将这些边缘以线条的形式呈现。
核心步骤:
读取图片并转为灰度图:边缘检测不关心颜色,只关心亮度变化。
高斯模糊去噪:减少图像中的噪点,防止算法将噪点误判为边缘。
Canny 边缘检测:应用 Canny 算法提取出轮廓线。

颜色反转:Canny 算法默认生成的是“白线黑底”的图,我们需要反转成“黑线白底”才符合线稿的习惯。
代码实现:
import cv2
import matplotlib.pyplot as plt
def image_to_canny_line_art(image_path):
"""
使用 Canny 边缘检测将图片转换为线稿图。
"""
# 1. 读取图片并转为灰度图
img = cv2.imread(image_path)
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 2. 高斯模糊去噪
# (kernel_size, sigmaX),kernel_size 必须是奇数
blurred_img = cv2.GaussianBlur(gray_img, (5, 5), 0)
# 3. Canny 边缘检测
# threshold1 和 threshold2 是阈值,可以调整以改变细节程度
# 较低的阈值会检测到更多、更细微的边缘
edges = cv2.Canny(blurred_img, threshold1=50, threshold2=150)
# 4. 颜色反转 (黑底白线 -> 白底黑线)
line_art = cv2.bitwise_not(edges)
return img, line_art
# --- 主程序 ---
if __name__ == '__main__':
input_image_path = 'your_image.jpg' # <--- 在这里替换成你的图片路径
original, canny_result = image_to_canny_line_art(input_image_path)
# 使用 Matplotlib 展示结果
plt.figure(figsize=(10, 5))
# 显示原图 (注意 OpenCV BGR -> Matplotlib RGB)
plt.subplot(1, 2, 1)
plt.imshow(cv2.cvtColor(original, cv2.COLOR_BGR2RGB))
plt.title('Original Image')
plt.axis('off')
# 显示线稿图
plt.subplot(1, 2, 2)
plt.imshow(canny_result, cmap='gray')
plt.title('Canny Line Art')
plt.axis('off')
plt.tight_layout()
plt.show()
# 如果想保存图片
# cv2.imwrite('line_art_canny.jpg', canny_result) 效果:线条干净、清晰,但可能缺少一些艺术感和明暗过渡。
方法二:艺术素描法 (Dodge and Burn)
这种方法模拟了摄影暗房中的“减淡与加深”技术,能够创造出更像手绘...
点击查看剩余70%
如何破解绕开seedance2.0真人照片生成视频 限制?
python有哪些算法可以将视频中的每个帧图片去除指定区域水印合成新的视频?
iphone的激光雷达数据能否实时传输到three三维空间中?
豆包sora等ai视频生成大模型生成的视频水印如何去除?
python如何实现在电脑上拨号打电话给手机?
具身机器人与人形机器人区别?
nodejs如何将一个完整的js代码文件切割成不同的部分混淆后动态加载进入html运行?
为啥windows.onerror捕获js错误是这样的{"message":"Script error.","source":"","lineno":0,"colno":0,"stack":null,
2026年ai将全面接管编程?
WebMCP是干啥的?


