图像处理的基础知识(1)

第一步、对图像进行一个初步的认识:

彩色图像:每个像素由R、G、B三个分量表示,每个通道取值范围0~255。数据类型一般为8位无符号整形。范例:

filePath = "F:\\learning\\code(1)\\Py\\1.jpg"
img = cv2.imread(filePath)
print(img.shape)

输出:

(300, 506, 3)

灰度图像:每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色的灰度。标注的灰度图像灰度级数为256.

filePath = "F:\\learning\\code(1)\\Py\\timg.jpg"
img = cv2.imread(filePath,0)
print(img.shape)

输出:(输出的是220*220的矩阵)

(220, 220)

二值图像(黑白图像):每个像素点只有两种可能,0和1.0代表黑色,1代表白色。数据类型通常为1个二进制位。

filePath = "F:\\learning\\code(1)\\Py\\0.jpg"
img = cv2.imread(filePath, 0)
print(img.shape)

输出:(输出是有0和1组成的309*450的矩阵)

(309, 450)

注意:

1、OpenCV的imread()和imwrite()能支持各种静态图像文件格式。不同的系统支持的文件格式不一样,但都支持BMP,通常还支持PNG、JPEG、TIFF格式。(处理医学的.dcm和.mhd图像时,推荐使用:SimpleITK,关于.dcm和.mhd的处理后续会详细介绍)

第二步:图像的基本概念

采样:是指将空域上和时域上连续的图像(模拟图像)变换成离散采样点(像素)集合的一种操作。下图所示为二维平面采用的过程:

            图1 图像采样示意图

图像的分辨率:采样所获得的图像总像素的多少:例如309*405图像的总像素为:125145个。

量化:学习信号与系统的都知道量化,意义是一样的,都是把采样点上表示亮暗的连续量离散化后,用数值来表示的。

借助“量化”的概念来理解一下:

8bit图像:图像中的每个像素都用8位二进制数表示,即2的8次方=256个量级

16bit图像:图像中的每个像素都用16位二进制数表示,即2的16次方=65536个量级

24bit图像:图像中的每个像素都用24位二进制数表示,即2的24次方=1667万个量级

注意:量级越大,图像质量就越高,存储空间就越大。

第三步:一个很重要的概念:灰度直方图

灰度直方图:是关于灰度级分布的函数,是对图像中灰度级分布的统计。将数字图像中的所有像素,按照灰度值的大小,统计其所出现的频度。

灰度直方图性质:

①:灰度直方图表征了图像的以为信息;

②:灰度直方图与图像之间的关系是多对一的映射关系;

③:子图直方图之和为整图的直方图;

用途:

①:作为图像数字化参数

②:图像分割阈值的选择依据

范例:显示图像的直方图

filePath = "F:\\learning\\code(1)\\Py\\1.jpg"
img = cv2.imread(filePath)
b, g, r = cv2.split(img)


def calcAndDrawHist(image, color):
    hist = cv2.calcHist([image], [0], None, [256], [0.0, 255.0])
    minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(hist)
    histImg = np.zeros([256, 256, 3], np.uint8)
    hpt = int(0.9 * 256)

    for h in range(256):
        intensity = int(hist[h] * hpt / maxVal)
        cv2.line(histImg, (h, 256), (h, 256 - intensity), color)

    return histImg
histImgB = calcAndDrawHist(b, [255, 0, 0])
histImgG = calcAndDrawHist(g, [0, 255, 0])
histImgR = calcAndDrawHist(r, [0, 0, 255])

cv2.imshow("histImgB", histImgB)
cv2.imshow("histImgG", histImgG)
cv2.imshow("histImgR", histImgR)
cv2.imshow("Img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

显示:

注意:

2、关于使用imshow('显示图像的帧名称',要显示图像的本身)显示图像时,一定要添加:

cv2.waitKey(0) #等待键盘触发时间
cv2.destroyAllWindows() #释放由OpenCV创建的所有窗口

3、cv2.cvtColor()函数将图像转换为BGR格式:

filePath = "F:\\learning\\code(1)\\Py\\1.jpg"
img = cv2.imread(filePath)
img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)

4、imwrite()要求图像为BGR活灰度格式,并且每个通道要有一定的位(bit),输出格式要支持这些通道。(BMP格式要求每一个通道有8位,PNG要求每个通道有8位活16位)

filePath = "F:\\learning\\code(1)\\Py\\1.jpg"
img = cv2.imread(filePath, 0)   #写0是将图像转换为灰度图读取
cv2.imwrite('result.png', img)

                                  图1   原图

                                  图2 result

猜你喜欢

转载自blog.csdn.net/songchunxiao1991/article/details/79310744