问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

python怎么用PIL模块处理BMP图像 二值化

发布网友 发布时间:2022-04-28 06:25

我来回答

4个回答

懂视网 时间:2022-04-28 10:47

在用python进行图像处理时,二值化是非常重要的一步,现总结了自己遇到过的6种 图像二值化的方法(当然这个绝对不是全部的二值化方法,若发现新的方法会继续新增)。

相关学习推荐:python视频教程

1. opencv 简单阈值 cv2.threshold

2. opencv 自适应阈值 cv2.adaptiveThreshold (自适应阈值中计算阈值的方法有两种:mean_c 和 guassian_c ,可以尝试用下哪种效果好)

3. Otsu's 二值化

例子:

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('scratch.png', 0)
# global thresholding
ret1, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
# Otsu's thresholding
th2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
# Otsu's thresholding
# 阈值一定要设为 0 !
ret3, th3 = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
# plot all the images and their histograms
images = [img, 0, th1, img, 0, th2, img, 0, th3]
titles = [
 'Original Noisy Image', 'Histogram', 'Global Thresholding (v=127)',
 'Original Noisy Image', 'Histogram', "Adaptive Thresholding",
 'Original Noisy Image', 'Histogram', "Otsu's Thresholding"
]
# 这里使用了 pyplot 中画直方图的方法, plt.hist, 要注意的是它的参数是一维数组
# 所以这里使用了( numpy ) ravel 方法,将多维数组转换成一维,也可以使用 flatten 方法
# ndarray.flat 1-D iterator over an array.
# ndarray.flatten 1-D array copy of the elements of an array in row-major order.
for i in range(3):
 plt.subplot(3, 3, i * 3 + 1), plt.imshow(images[i * 3], 'gray')
 plt.title(titles[i * 3]), plt.xticks([]), plt.yticks([])
 plt.subplot(3, 3, i * 3 + 2), plt.hist(images[i * 3].ravel(), 256)
 plt.title(titles[i * 3 + 1]), plt.xticks([]), plt.yticks([])
 plt.subplot(3, 3, i * 3 + 3), plt.imshow(images[i * 3 + 2], 'gray')
 plt.title(titles[i * 3 + 2]), plt.xticks([]), plt.yticks([])
plt.show()

结果图:

4. skimage niblack阈值

5. skimage sauvola阈值 (主要用于文本检测)

例子:

https://scikit-image.org/docs/dev/auto_examples/segmentation/plot_niblack_sauvola.html

import matplotlib
import matplotlib.pyplot as plt

from skimage.data import page
from skimage.filters import (threshold_otsu, threshold_niblack,
  threshold_sauvola)


matplotlib.rcParams['font.size'] = 9


image = page()
binary_global = image > threshold_otsu(image)

window_size = 25
thresh_niblack = threshold_niblack(image, window_size=window_size, k=0.8)
thresh_sauvola = threshold_sauvola(image, window_size=window_size)

binary_niblack = image > thresh_niblack
binary_sauvola = image > thresh_sauvola

plt.figure(figsize=(8, 7))
plt.subplot(2, 2, 1)
plt.imshow(image, cmap=plt.cm.gray)
plt.title('Original')
plt.axis('off')

plt.subplot(2, 2, 2)
plt.title('Global Threshold')
plt.imshow(binary_global, cmap=plt.cm.gray)
plt.axis('off')

plt.subplot(2, 2, 3)
plt.imshow(binary_niblack, cmap=plt.cm.gray)
plt.title('Niblack Threshold')
plt.axis('off')

plt.subplot(2, 2, 4)
plt.imshow(binary_sauvola, cmap=plt.cm.gray)
plt.title('Sauvola Threshold')
plt.axis('off')

plt.show()

结果图:

6.IntegralThreshold(主要用于文本检测)

使用方法: 运行下面网址的util.py文件

https://github.com/Liang-yc/IntegralThreshold

结果图:

热心网友 时间:2022-04-28 07:55

遍历图片对象?可是怎么个遍历法呢?Pillow 提供了一个 .load() 方法,用来处理像素。图片嘛,当然是二维的,有宽和高的。

pixels = image.load()
for x in ramge(image.width):
for y in range(image.height):
pixsels[x, y] = 255 if pixsels[x, y] > 125 else 0

当然了,只是最简单的二值化的话,直接 image.convert('1') 就可以了 :-)

热心网友 时间:2022-04-28 09:13

Pillow 提供了一个 .load() 方法,用来处理像素。图片嘛,当然是二维的,有宽和高的。

pixels = image.load()
for x in ramge(image.width):
for y in range(image.height):
pixsels[x, y] = 255 if pixsels[x, y] > 125 else 0

当然了,只是最简单的二值化的话,直接 image.convert('1') 就可以了 :-)

热心网友 时间:2022-04-28 10:47

遍历图片对象?可是怎么个遍历法呢?Pillow 提供了一个 .load() 方法,用来处理像素。图片嘛,当然是二维的,有宽和高的。

pixels = image.load()
for x in ramge(image.width):
for y in range(image.height):
pixsels[x, y] = 255 if pixsels[x, y] > 125 else 0
当然了,只是最简单的二值化的话,直接 image.convert('1') 就可以了 :-)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
鼠戴什么属相首饰最旺运 什么宝石最旺鼠 属鼠戴什么财运最旺 属鼠佩戴什么珠子最旺 这首钢琴曲叫什么名字?很多广播站结束的时候喜欢用的背景音乐. ...纯音乐,是钢琴曲,常用作感情倾诉类节目的背景音乐 ...背景音乐 有一首钢琴曲 同一节奏渐进重复,好多电视节目背景音乐... 脾虚的原因有哪些?脾虚是什么导致的? iGene 击音 听键DJ 蓝牙音频接收器 蓝色-购买最佳价格 1MORE 万魔 蓝牙音频接收器-高清无线认证,稳定连接,超长续航 python数出字符串中大小写字母的 Python 怎么在Python中输出大写字符出现的次数 python 统计文本中字母个数 如何用Python编程输入英文语句,将所有字母变成大写,统计每个字母的个数,并输出出现次数最多的字母次数? 用python编写一个函数tongji(s),接收传入的字符串s,统计大写字母的个数、 小写字母的 用户输入字符串,python统计大写、小写,数字的个数 用python写程序实现:输入一字符串,分别统计其中的英文字母个数,空格、数字和其他字符。 python从键盘输入一个字符串,直到按Enter键结束,统计字符串的大,小写英文_问一问 python写一个函数countNum(s),确定输入的字符串s中有几个大写字母,几个小写字? python代码:计算一个文本文件中所有大写字母,小写字母,数字和其他的数量。 用python从键盘输入一个字符串,统计其中大写字母的个数? 用python从键盘输入一个字符串,统计其中大写小写字母以及数字的个数? Python中列表和字典的区别以及适用的场景 python的数据类型中列表、元组和字典分别表示什么? python的元组和列表的区别 Python 列表和元组的区别是什么 python中元组和列表有什么区别 在做测试自动化时,python中的列表和元组这两种数据类型有何区别? 列表,元组和字典的区别有哪些 Python 两组数据相减 python如何删除二值化图片中小块白色区域 python元组元素可以重复吗 python delattr和del的区别 Python中一些小问题 python del问题 list 中 remove pop 和 del 的区别 列表框控件的remove方法和clear方法有什么区别? python中列表增加元素的方法 python中List添加、删除元素的几种方法 List<T>中,Remove和RemoveAt有什么区别 python中n的阶乘 python求整数n阶乘 利用python函数计算n的阶层 Python 输入一个正整数,计算它的各位数字的阶乘之和,判断它是否是一个阶乘和? Python整数阶乘组合计算 输入n 计算n的阶乘,要用递归算法,python,谢谢大神! 用Python算n的阶乘,n的大小由用户输入。并且把计算结果输出到文件jc.txt,如果没有文件则创建一个新的。 使用输入来计算任意数量的阶乘 python编程 怎样设置pycharm的背景颜色 哪位大佬知道solodworks颜色怎么改回默认白色?