图像灰度化

栏目: 编程工具 · 发布时间: 5年前

内容简介:离研究生毕业只有六个月了,毕业设计也该动手了。去年开题,选择了《基于图像处理的客观题自动阅卷系统的设计与实现》这个题目。今年中期,考虑了很久,最终还是没有换题目。想要做AIOps,但是自己基础薄弱,也没有特定的方向,到了六月份也不一定能完成。保险起见,还是做阅卷系统吧!阅卷系统主要有五个方面的研究内容,分别是图像预处理、目标检测、图像分割、手写识别和移动Web。其中图像预处理包括试卷图像的灰度化、二值化、去噪、倾斜矫正等;目标检测是为了定位学号和答案的位置,并且提取出这些信息;图像分割是为了分割学号和多选题

离研究生毕业只有六个月了,毕业设计也该动手了。去年开题,选择了《基于图像处理的客观题自动阅卷系统的设计与实现》这个题目。今年中期,考虑了很久,最终还是没有换题目。想要做AIOps,但是自己基础薄弱,也没有特定的方向,到了六月份也不一定能完成。保险起见,还是做阅卷系统吧!

阅卷系统主要有五个方面的研究内容,分别是图像预处理、目标检测、图像分割、手写识别和移动Web。其中图像预处理包括试卷图像的灰度化、二值化、去噪、倾斜矫正等;目标检测是为了定位学号和答案的位置,并且提取出这些信息;图像分割是为了分割学号和多选题的字符;手写识别是为了识别手写字符,包括数字和字母;移动Web是为了方便老师随时随地使用系统。

本文,就来研究一下图像的灰度化。

理论

在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值,因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。一般有以下四种方法对彩色图像进行灰度化:

1、分量法

将彩色图像中的三分量的亮度作为三个灰度图像的灰度值,可根据应用需要选取一种灰度图像。f1(i,j)=R(i,j) f2(i,j)=G(i,j) f3(i,j)=B(i,j) 其中fk(i,j)(k=1,2,3)为转换后的灰度图像在(i,j)处的灰度值。

2、最大值法

将彩色图像中的三分量亮度的最大值作为灰度图的灰度值。f(i,j)=max(R(i,j),G(i,j),B(i,j))

3、平均值法

将彩色图像中的三分量亮度求平均得到一个灰度图。f(i,j)=(R(i,j)+G(i,j)+B(i,j))/3

4、加权平均法

根据重要性及其它指标,将三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感最高,对蓝色敏感最低,因此,按下式对RGB三分量进行加权平均能得到较合理的灰度图像。f(i,j)=0.30R(i,j)+0.59G(i,j)+0.11B(i,j))

更多内容参考 图像分析

实践

算法的实现,主要参考 Python下OpenCV的使用 – 图像灰度化

安装opencv

这个毕业设计,打算使用 python 来实现,编辑器使用pycharm。图像处理方面,主要使用opencv。首先安装opencv,很简单,一条命令即可:

pip install opencv-python

如果离线安装的话,不妨参考 使用OpenCV实现实时视频目标检测

安装完成后,命令行中输入 python ,进入python shell。输入 import cv2 回车,如果没有报错,说明安装成功。

简单灰度化

在加载图片的时候,直接调用opencv的灰度化方法。

import cv2
image = cv2.imread('image/test.jpg')
grayimage = cv2.imread('image/test.jpg',cv2.IMREAD_GRAYSCALE)
cv2.imshow('image',image)
cv2.imshow('grayimage',grayimage)
cv2.waitKey(0)

图像灰度化

分量法

import cv2
image = cv2.imread('image/test.jpg')

b,g,r = cv2.split(image)   # the order is not r,g,b

cv2.namedWindow("Image")
cv2.imshow("Image",image)

cv2.namedWindow("ImageR")
cv2.imshow("ImageR",r)

cv2.namedWindow("ImageG")
cv2.imshow("ImageG",g)

cv2.namedWindow("ImageB")
cv2.imshow("ImageB",b)
cv2.waitKey(0)

cv2.destroyAllWindows()

图像灰度化

最大值法

import cv2
import numpy
image = cv2.imread('image/test.jpg')

shape = (image.shape[0],image.shape[1])
newImage = numpy.ndarray(shape,image.dtype)

for i in range(image.shape[0]):
    for j in range(image.shape[1]):
       newImage[i,j] = max(image[i,j][0],image[i,j][1],image[i,j][2])

cv2.namedWindow("NewImageMax")
cv2.imshow("NewImageMax",newImage)
cv2.waitKey(0)

cv2.destroyAllWindows()

图像灰度化

平均值法

import cv2
import numpy
image = cv2.imread('image/test.jpg')

shape = (image.shape[0],image.shape[1])
newImage = numpy.ndarray(shape,image.dtype)


for i in range(image.shape[0]):
    for j in range(image.shape[1]):
       newImage[i,j] = (int(image[i,j][0]) + int(image[i,j][1]) + int(image[i,j][2])) / 3

cv2.namedWindow("NewImageAver")
cv2.imshow("NewImageAver",newImage)
cv2.waitKey(0)

cv2.destroyAllWindows()

图像灰度化

加权平均法

import cv2
import numpy
image = cv2.imread('image/test.jpg')

shape = (image.shape[0],image.shape[1])
newImage = numpy.ndarray(shape,image.dtype)

for i in range(image.shape[0]):
    for j in range(image.shape[1]):
        newImage[i,j] = 0.11 * image[i,j][0] + 0.59 * image[i,j][1] + 0.30 * image[i,j][2]

cv2.namedWindow("NewImageWeightAver")
cv2.imshow("NewImageWeightAver",newImage)
cv2.waitKey(0)

cv2.destroyAllWindows()

图像灰度化


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

单元测试之道Java版

单元测试之道Java版

David Thomas、Andrew Hunt / 陈伟柱、陶文 / 电子工业 / 2005-1 / 25.00元

程序员修炼三部曲丛书包含了四本书,介绍了每个注重实效的程序员和成功团队所必备的一些工具。 注重实效的程序员都会利用反馈来指导开发,并驱动个人的开发流程。编码的时候,最有用的反馈来自于“单元测试”。 为了测试一座桥梁,不会只在晴朗的天气,开一辆汽车从桥中间穿过,就认为已经完成了对桥梁的测试。然而许多程序员却正在使用这种测试方法——把这种一次顺利通过称为“测试”。事实上,注重实效的程序员应......一起来看看 《单元测试之道Java版》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换