第二章图像处理,2

发表时间:2020-03-11

2.1 数字图像的表示

  • 图像是由像素构成的
  • 图像分类
    • 二值图像(0/1)
    • 灰度图像(0:黑;255:白;other:灰)
    • RGB图像(R:red,G:green,B:blue)
      • 注意: openCV顺序:BGR
  • 读取图像: retval = cv2.imread(file_name [, param])
    • param
      • cv.IMREAD_UNCHANGED
      • cv.IMREAD_GRAYSCALE
      • cv.IMREAD_COLOR
      • ...
    • 例: img = cv2.imread("d:\\image.jpg")
  • 显示图像:
    • None = cv2.imshow(窗口名, 图像名)
      • 例: cv2.imshow("demo", image)
    • retval = cv2.waitKey( [,delay])
      • delay
        • 大于0:等待 delay 毫秒
        • 小于0:等待键盘单击
        • 等于0:无限等待
    • cv2.destroyAllWindows() :删除所有窗口
  • 保持图片: retval = cv2.imwrite(文件地址, 文件名)
    • 例: cv2.imwrite('D:\\test.jpg', img)
  • 实操
import cv2

i = cv2.imread("D:\\data\\Code\\PycharmProjects\\helloworld\\lena.jpg")
cv2.imshow("Demo", i)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imwrite("D:\\data\\Code\\PycharmProjects\\helloworld\\lena1.jpg", i)

2.2 图像基本操作

2.2.1 图像像素级处理
opencv
  • 读取像素
    • 返回值 = 图像(位置参数)
    • 灰度图像:返回灰度值—— p=img[88, 142] —— print(p)
    • RGB图像:返回 B G R 的值
      • blue=img[78, 125, 0] —— print(blue)
      • green=img[78, 125, 1] —— print(green)
      • red=img[78, 125, 2] —— print(red)
      • p=img[78, 125] —— print(p) ——三个值
  • 修改像素
    • 灰度图像: img[88, 99]=255
    • RGB图像:
      • img[88, 99, 0]=255
      • img[88, 99, 1]=255
      • img[88, 99, 2]=255
      • img[88, 99]=[255,255,255]
numpy
  • 读取像素
    • 返回值 = 图像.item(位置参数)
    • 灰度图像:返回灰度值—— p=img.item(88, 142) —— print(p)
    • RGB图像:返回 B G R 的值
      • blue=img.item(78, 125, 0) —— print(blue)
      • green=img.item(78, 125, 1) —— print(green)
      • red=img.item(78, 125, 2) —— print(red)
      • p=img.item(78, 125) —— print(p) ——三个值
  • 修改像素值
    • 图像名.itemset(位置, 新值)
    • 灰度图像: img.itemset((88, 99), 255)
    • RGB图像:
      • img.itemset((88, 99, 0), 255)
      • img.itemset((88, 99, 1), 255)
      • img.itemset((88, 99, 2), 255)
获取图像属性
  • 形状:行、列、通道数
    • shape 可以获取图像的形状,返回包含行数、列数、通道数的元组
    • 灰度:返回行数、列数—— img.shape —— (512, 512)
    • 彩度:返回行数、列数、通道数—— img.shape —— (512, 512, 3)
  • 像素数目
    • size 可以获取图像的像素数目
    • 灰度:返回 行数*列数—— img.size
    • 彩度:返回 行数*列数*通道数
  • 图像的数据类型
    • dtype 返回的是图像的数据类型
    • 例: img.dtype —— uint8
图像ROI
  • ROI (region of interest),感兴趣区域
  • 从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域
  • 可以通过各种算子(Operator)和函数来求得感兴趣区域ROI,并进行图像的下一步处理
  • face=a[220:400, 250:350] ——感兴趣区域——可以复制什么的
2.2.2 图像通道操作
  • 拆分通道
import cv2
img = cv2.imread('lena.png')
## 方式一
b = img[:, :, 0]
g = img[:, :, 1]
r = img[:, :, 2]
## 方式二
b, g, r = cv2.split(img)
## 方式三
b = cv2.split(a)[0]
g = cv2.split(a)[1]
r = cv2.split(a)[2]
  • 合并通道: cv2.merge([b,g,r])
    • 注意顺序
2.2.3 图像运算
加法运算

Numpy

  • 取模加法——运算方式:结果=图像1+图像2
    • 超过255: %255

OpenCV

  • 饱和运算——运算方式:结果=cv2.add(图像1,图像2)
    • 超过255: 255

注意:

  • 参与运算的图像大小、类型必须一致
  • vs加法运算:有权重
  • 函数 addWeighted cv2.addWeighted(src1, alpha, src2, beta, gamma)
    • src1 :图像1
    • alpha :图像1权重
    • src2 :图象2
    • beta :图像2权重
    • gamma :亮度调节值——不能省略——不想调,设 0
  • 例: cv2.addWeighted(img1, 0.3, img2, 0.6, 0)
图像融合
  • 将2张或2张以上的图像信息的融合到1张图像上
  • 融合的图像含有更多的信息、能够更方便人来观察或计算机处理
2.2.4 几何变换
图像缩放
  • 函数 resize
  • 格式: dst = cv2.resize(src, dsize[, dst[ ,fx[ ,fy[ ,interpolation]]]])
    • src :原始图像
    • dsize :缩放大小
      • 例: cv2.resize(a, (122, 123)) :缩放成122列,123行
    • fx, fy :缩放大小
      • 例: cv2.resize(a, None, fx=0.5, fy=0.7)
图像翻转
  • 函数 flip
  • 格式: dst = cv2.flip(src, flipCode)
    • src :原始图像
    • flipCode
      • =0 :以X轴为对称轴翻转
      • >0 :以Y轴为对称轴翻转
      • <0 :以X轴、Y轴方向同时翻转

2.3 色彩空间

将图像由一种类型转换为另外一种类型

  • cv2.verColor(a, cv2.COLOR_BGR2GRAY)
  • cv2.verColor(a, cv2.COLOR_BGR2RGB)
  • cv2.verColor(a, cv2.COLOR_GRAY2BGR)

文章来源互联网,如有侵权,请联系管理员删除。邮箱:417803890@qq.com / QQ:417803890

微配音

Python Free

邮箱:417803890@qq.com
QQ:417803890

皖ICP备19001818号-4
© 2019 copyright www.pythonf.cn - All rights reserved

微信扫一扫关注公众号:

联系方式

Python Free