4- OpenCV+TensorFlow 入门人工智能图像处理-

作者: 天涯明月笙 | 来源:发表于2018-04-08 22:54 被阅读290次

图片特效及线段文字的绘制

  • 特效1: 灰度处理
markmark

完成彩色图片灰度化。彩色图片有三个颜色通道RGB
灰度图片也是三通道的话,RGB值相等。
单通道的灰度图片的值,需要经过RGB值进行计算。

图中两个公式: 一个是取均值,一个是根据公式

  • 特效2: 底板效果
markmark

当前像素取反得到的。当然底板也分灰度底板和彩色底板。

markmark markmark
  • 特效3: 马赛克
markmark

思路将马赛克的地方划分成一个小方框。把方框中的像素用其中的某一个颜色进行取代

markmark
  • 特效4: 毛玻璃特效
markmark markmark

毛玻璃是把方框中的所有像素,每一个像素都用一个随机的来替代,替代完之后每一个像素仍然是不一样的。

  • 特效5: 图像融合
markmark

实现两张图片相互融合成为一张图片

  • 特效6: 图片蓝色
markmark

颜色映射,给出一个RGB的颜色映射表或映射公式。

  • 特效7: 边缘检测
markmark

保留了整个图像的细节信息, 将图像进行二值化之后可以看到右边

右边图所有的细节被保留。光滑的地方都被删除掉了

  • 特效8: 浮雕效果
markmark

边缘检测的基础上多添加了一个底板。形成浮雕效果。

讲解调优算法和思想

介绍一些图像滤镜的相关算法,掌握相机滤镜的相关知识。

如何实现这个滤镜,掌握这些原理就很重要了。

  • 目的二: 三方面 api 原理 源码

形状绘制

markmark

椭圆圆形正方形等任意形状的绘制。

以及文字与图片的绘制

markmark

图片美化章节会介绍的

  • 直方图
markmark

统计出行概率。

图像处理的基础。灰度特效平常使用的比较少。行人检测,人脸检测都要用到灰度特效。

为后面的复杂内容打下基础。

图片灰度处理

imread

方法1: imread() 指定颜色模式为0 灰度图

#imread 
#方法1 imread 
import cv2
# 0设置为灰度图片
img0 = cv2.imread('image0.jpg',0)
# 1设置为彩色图片
img1 = cv2.imread('image0.jpg',1)

# 宽高,深度信息为1
print(img0.shape)

# 宽高,深度信息为3
print(img1.shape)

cv2.imshow('src',img0)
cv2.waitKey(0)
markmark

方法2 cvtColor方法

import cv2
img = cv2.imread('image0.jpg',1)

# cvtColor方法: 图片,转换模式: BGR转换为灰度(颜色空间转换)
dst = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 颜色空间转换 1 data 2 BGR gray
cv2.imshow('dst',dst)
cv2.waitKey(0)

灰度处理算法原理,源码编写

问题来了: 灰色图像的Rgb值和彩色图像的rgb值到底有什么区别

灰色图像,如果也是三通道的话。R = G = B gray

我们可以将当前rgb 三者的均值当做灰度图像的值

方法3:

import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
# RGB R=G=B = gray  (R+G+B)/3

# 生成空白模板,形状为高宽,深度3. 数据类型
dst = np.zeros((height,width,3),np.uint8)
for i in range(0,height):
    for j in range(0,width):
        # 读取原始图片的bgr
        (b,g,r) = img[i,j]
        # 因为我们读取出来的b g r 是uint8的,计算有可能溢出
        gray = (int(b)+int(g)+int(r))/3
        # 目标图片的每个点,等于当前rgb的均值
        dst[i,j] = np.uint8(gray)
cv2.imshow('dst',dst)
cv2.waitKey(0)

灰度图像三通道,RGB三者取均值形式

方法4 gray = r*0.299+g*0.587+b*0.114

心理学灰度计算公式

import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
dst = np.zeros((height,width,3),np.uint8)
for i in range(0,height):
    for j in range(0,width):
        (b,g,r) = img[i,j]
        b = int(b)
        g = int(g)
        r = int(r)
        gray = r*0.299+g*0.587+b*0.114
        dst[i,j] = np.uint8(gray)
cv2.imshow('dst',dst)
cv2.waitKey(0)

如何快速简单计算灰度值。(算法优化)

  1. 灰度是本章中最重要的知识点
  2. 它是很多图像识别的基础
  3. 图像算法的实时性(算法优化)

优化的基本原则:

  • 定点 快于 浮点
  • 加减 快于 乘除法;移位操作比乘除法更要快些

心理学公式: r*0.299+g*0.587+b*0.114

优化这个公式。

我们乘以4来优化误差比较大。
我们可以通过乘以128 512 1024等更大的数进行优化。

  • 浮点转整型,整型转移位运算
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
# RGB R=G=B = gray  (R+G+B)/3
dst = np.zeros((height,width,3),np.uint8)
for i in range(0,height):
    for j in range(0,width):
        (b,g,r) = img[i,j]
        b = int(b)
        g = int(g)
        r = int(r)
        # 浮点运算转为定点运算。有误差但是可以用。
        
        # gray = (r*1+g*2+b*1)/4
        
        # 乘以1全部省略掉,乘以2相当于放大两倍。
        # 左移一位扩大2
        # 右移两位除以4
        gray = (r+(g<<1)+b)>>2
        dst[i,j] = np.uint8(gray)
cv2.imshow('dst',dst)
cv2.waitKey(0)

相关文章

网友评论

    本文标题:4- OpenCV+TensorFlow 入门人工智能图像处理-

    本文链接:https://www.haomeiwen.com/subject/huqvhftx.html