二值化处理图片数据集
首先导入相应的包
cv2即opencv-python包
if __name__ == "__main__":
上面这一句话的含义:
自己的 .py 可以作为自己的脚本运行,在 main 中做一些测试,或者本身程序的运行 ,当然你也可以使用你的 .py 作为模块给别人使用给别人提供一些便利为了不让别人一导入你的模块 ,就直接运行整个脚本
那么使用if name == 'main' 其中的代码就不会在被 import 时被执行。
os.path.join()函数
找到图片的文件夹路径
cv2.imread()
读取图片
cv2.imwrite()
写图片,即保存图片到相应的文件夹,相应的名字
img.shape()
width, height = img.shape[:2][::-1]
.shape属性是读入图片后的一个元组dutuple 返回图片的(高,宽,位深) 比如image.shape返回(687, 740, 3) 而width, height=(687, 740, 3) 分解了元组并分别用width, height获得了前两个数据,即高687、宽740
cv2.waitkey()
等待一个时间,通常与cv2.imshow()连用,来显示图片
cv2.resize()函数
函数的原型: cv2.resize(InputArray src, OutputArray dst, Size, fx, fy, interpolation)
参数解释:
INPUTARRAY SRC | 输入图片 |
---|---|
OutputArray dst | 输出图片 |
Size | 输出图片尺寸 |
fx, fy | 沿x轴,y轴的缩放系数 |
interpolation | 插入方式 |
img_gray = cv2.cvtColor(img_resize, cv2.COLOR_RGB2GRAY) retval, dst = cv2.threshold(img_gray, 90, 255, cv2.THRESH_BINARY)
这两句话分别是灰度化处理,与二值化处理,采用的是固定阈值二值化
retval, dst = cv2.threshold(img_gray, 90, 255, cv2.THRESH_BINARY) #阈值设为90
cv2.imwrite(path1 + name, dst) # 保存到path1下,文件名为name
处理的最终结果如下
在这里增加两种自适应二值化处理方法,效果更好
一个是算术平均自适应二值化方法,
#算术平均二值化自适应二值化
dst = cv2.adaptiveThreshold(img_gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 5)
cv2.imwrite(path2 + name, dst)
处理效果如下
一个是高斯均值化法自适应二值化
#高斯加权均值法自适应二值化
dst = cv2.adaptiveThreshold(img_gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 5)
cv2.imwrite(path3 + name, dst)
处理效果如下
可以根据需要,修改参数,寻找最好的效果
参考资料
(【OpenCV 例程200篇】04. 用 matplotlib 显示图像(plt.imshow)_小白YouCans的博客-CSDN博客_matplotlib显示图像)
(Python - OpenCV 图像二值化处理_小小晓晓阳的博客-CSDN博客_opencv python 二值化)
python 读取、保存、二值化、灰度化图片+opencv处理图片的方法(python 读取、保存、二值化、灰度化图片+opencv处理图片的方法_JohnieLi的博客-CSDN博客_python 图片转灰度)
python怎么读取特定路径文件夹下的图片(python怎么读取特定路径文件夹下的图片_躺在朱一龙睫毛写代码的博客-CSDN博客_python如何读取路径中的图片)
if name == 'main': 到底是个啥?(if __name__ == '__main__': 到底是个啥? - 云+社区 - 腾讯云)