OpenCV 1~4 图像处理、图像运算、类型转换、几何变换

1 图像处理

1.1 图像处理

import cv2

  1. 读入图像
    retval = cv2.imread(文件名[,显示控制参数])
    文件名:文件路径,
    显示控制参数:cv.IMREAD_UNCHANGED(原图);cv.IMREAD_GRAYSCALE(灰度图);cv.IMREAD_COLOR(彩色)
  2. 显示图像
    img = cv2.imshow(窗口名,图像名)
    cv2.waitKey([,delay]) # delay>0 等待delay毫秒;delay<0 等待键盘单击;delay=0 无限等待;
    cv2.destryAllWindows() # 销毁
  3. 保存图像
    img = cv2.imread(文件地址,文件名)
# Test 
import cv2
img = cv2.imread('')
cv2.imshow('demo',img)
cv2.waitKey(0) 
cv2.destroyAllWindows()
cv2.imwrite('',img)
  1. 图像由像素构成,像素越多,图像月清晰
  2. 图像分类:二值图[0,1];灰度图[0255];BGR图像[0255,0255,0255]
  3. 读取像素: 返回值=图像(位置参数);灰度图像返回灰度值p=img[89,120];彩色图像返回BGR三个颜色B,G,R = img(89,120,:);B = img(89,120,0);G = img(89,120,1); R = img(89,120,2)
  4. 修改像素:灰度图像:img[89,120]= 100;彩色图像修改像素mg(89,120)=[100,100,100];img(89,120,0)=100; img(89,120,1)=100; img(89,120,2)=100
import cv2
img = cv.imread('路径',1)  # 彩色
img = cv.imread('路径',0)  # 灰色
img = cv.imread('路径',-1) # 透明
p = img[100,100]
print(p)
img[100,100] = 255
print(p)

img1 = cv2.imread('',1)  
p1 = img[100,100]
print(p1)
cv2.imshow('demo',img1)
cv2.waitKey(0) 
cv2.destroyAllWindows()
img1[100,100,0] = [255,255,255]
img1[100,100,1] = 255
img1[100,100,2] = 255
print(p1)
img1[100:200,100:300] = [255,255,255] 
cv2.imshow('demo',img1)
cv2.waitKey(0) 
cv2.destroyAllWindows()

1.2 使用numpy访问像素

  1. 读取像素: 返回值=图像.item(位置参数)(位置参数)
  2. 修改像素: 图像.itemset(位置,新值)
## 灰度图像
import cv2
img1 = cv2.imread('地址')
p = img1.item(100,120)  # 读取像素
print(p)
img1.itemset((100,120),255) 修改像素
print(p)

## 彩色图像
import cv2
img2 = cv2.imread('灰度')
b,g,r = img1.item(100,120)  # 读取像素
print(b,g,r)
b1 = img2.itemset((100,120,0),255)
g1 = img2.itemset((100,120,1),255)
r1 = img2.itemset((100,120,2),255) 

print(b1,g1,r1)

## 彩色图像转灰度图像
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

## 灰度图像转二值图像
_,img_bin = cv.threshold(img_gray ,th1, th2, cv.THRESH_BINARY)


## 彩色图像转灰度图像,灰度图像转二值图像
import cv2
import numpy as np
a = np.random.randint(0,255,[10,10,3],dtype=np.uint8)
a_gray = cv2.cvtColor(a,cv2.COLOR_BGR2GRAY)
_,a_bin = cv2.threshold(a_gray ,180, 200, cv2.THRESH_BINARY)

1.3 获取图像属性

  1. 形状:获取行列通道
  2. 像素数目
  3. 像素数据类型
## 灰度图像
import cv2
img1 = cv2.imread('灰度')
img1.shape  # 形状
img1.size   # 像素数目(h*w)
img1.dtype  # 像素数据类型uint8
## 彩色图像
import cv2
img2 = cv2.imread('灰度')
img2.shape
img2.size  # (h*w*c)
img2.dtype  # uint8

1.4 感兴趣区域ROI

ROI(region of interest):感兴趣区域

# 通过下标获取感兴趣区域
import cv2 
import numpy
img = cv2.imread('')
ROI = np.ones((101,101,3))
cv2.imshow('demo',img)
ROI = img[200:400,200:400]
cv2.imshow('ROI',ROI)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 把一个图像的感兴趣区域赋值到另外一张图片上
import cv2 
import numpy
img1 = cv2.imread('')
img2 = cv2.imread('')
face = np.ones((101,101,3))
cv2.imshow('demo',img1)
ROI = img1[300:400,300:400]
img2[0:100,0:100] = ROI 
cv2.imshow('ROI',ROI)
cv2.waitKey(0)
cv2.destroyAllWindows()

1.5 通道的拆分与合并

  1. 通道的拆分 b,g,r = cv2.split(img)
  2. 通道的合并 bgr = cv2.merge([b,g,r]);rgb = cv2.merge([r,g,b])
# 1. 通道的拆分
import cv2 
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('')
a = np.random.randint(0,255,[10,10,3],dtype=np.uint8)
cv2.imwrite('./Desktop/a.png',a)
plt.imshow(a)
## 拆分1
b = img1[:,:,0]
g = img1[:,:,1]
r = img1[:,:,2]
## 拆分2 
b1,g1,r1 = cv2.split(img)
cv2.imshow('b1',b1)
cv2.imshow('g1',g1)
cv2.imshow('r1',r1)
cv2.waitKey(0)
cv2.destroyAllWindows()
## 拆分部分通道
b1 = cv2.split(img)[0]
r1 = cv2.split(img)[1]
r1 = cv2.split(img)[2]

# 2. 通道的合并
bgr = cv2.merge([b,g,r])
cv2.imshow('bgr',bgr)
cv2.waitKey(0)
cv2.destroyAllWindows()

2 图像运算

2.1 图像加减乘除运算

  1. 结果图像 = 图像1 + 图像2; img = img1 + img2
  2. Numpy加法(取模): if 结果<=255: 结果=(img1 + img2);else:结果=(img1 + img2) % 255
  3. OpenCV加法:cv2.add(img1,img2) # if 结果<=255: 结果=(img1 + img2);else:结果 = 255
  4. 图像1 、图像2的shape必须一致。
  5. img = cv2.add(img1, img2)
  6. img = cv2.subtract(img1, img2)
  7. img = cv2.multiply(img1, img2)
  8. img = cv2.divide(img1, img2)
# 1. Numpy加法 更黑
import cv2 
import numpy
img1 = cv2.imread('')
img2 = cv2.imread('')
r1 = img1+img2
cv2.imshow('r1',r1)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 2. OpenCV加法  混合图像,加噪声,添加背景
import cv2 
import numpy
img1 = cv2.imread('')
img2 = cv2.imread('')
r2 = cv2.add(img1,img2)
img = cv.addWeighted(img1, 0.5,img2, 0.5,0)
cv2.imshow('r2',r2)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 3. 减法 判断两个图片是否相近,消除差异,去掉背景
a = np.random.randint(0,255,[10,10,3],dtype=np.uint8)
b = np.random.randint(0,255,[10,10,3],dtype=np.uint8)

a_b = cv2.subtract(a,b)

# 4. 乘法 (掩码*图片)
a = a / 255
a = a.astype(np.uint8)
a[4:7,4;7,:]=1
ab = cv2.multiply(a,b)
ab_ = cv2.multiply((1-a),b)

# 5. 除法 ,比较差异
ab = cv2.divide(a,b)

# 融合
ab = cv2.addWeighted(a,1,b,1,0)

# 图像像素非线性变换
img = cv2.convertScaleAbs(img, alpha=1, beta=0)

s(x,y) = c+kr(x,y)

s = a + \frac{ln(r+1)}{blnc}

s = cr^\gamma  ; gamma = 0.5,1,1.5

2.2 图像融合

  1. 将2张或2张以上的图片信息融合到一张图像上.
  2. 结果图像 = 图像1系数1 + 图像2系数2 + 亮度调节
  3. img = img10.3 + img20.7 + 18
  4. addWeighted : dst =cv2.addWeighted(src1,alpha,src2,beta,gamma);
  5. dst = src1alpha+src2beta+gamma(gamma不能省略)
import cv2 
img1 = cv2.imread('')
img2 = cv2.imread('')
dst =cv2.addWeighted(img1,1,img2,1,0)
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

3 类型转换

3.1 类型转换

将图像由一种类型转换成另一种类型。

  1. cv2.COLOR_BGR2GRAY
  2. cv2.COLOR_BGR2RGB
  3. cv2.COLOR_GRAY2BGR
  4. 图像二值化

(1)彩色转换成灰度图

# 彩色转换成灰度图
import cv2 
img1 = cv2.imread('')
img2 = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
cv2.imshow('color',img1)
cv2.imshow('gray',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

(2)BGR2RGB

# BGR2RGB
import cv2 
img1 = cv2.imread('')
img2 = cv2.cvtColor(img1,cv2.BGR2RGB)
cv2.imshow('BGR',img1)
cv2.imshow('RGB',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

(3)GRAY2BGR

# GRAY2BGR   灰度转换成彩色之后,三个通道的颜色一样。
import cv2 
img1 = cv2.imread('')
img2 = cv2.cvtColor(img1,cv2.GRAY2BGR)
cv2.imshow('GRAY',img1)
cv2.imshow('BGR',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

(4)二值化

import cv2
import numpy as np
import matplotlib.pyplot as plt
img_gray = cv2.imread('',0)
img_col = cv2.imread('',1)
img_tra = cv2.imread('',-1)
img_col = cv2.cvtColor(img_col,cv2.COLOR_BGR2RGB)
img_gray.shape,img_col.shape,img_tra.shape
plt.imshow(img_col)
plt.imshow(img_gray)
plt.imshow(img_tra)
_, img_bin = cv2.threshold(img_gray, 150, 255, cv2.THRESH_BINARY)
plt.imshow(img_bin)

3.2 图像像素非线性变换

  1. img = cv.convertScaleAbs(img, alpha=1, beta=0)
s = b + kr

s = a + \frac{ln(r+1)}{b}

s = cr^\gamma

(1)img = cv2.convertScaleAbs(img, alpha=2, beta=0)
# img = cv2.convertScaleAbs(img, alpha=1, beta=0)
import cv2 
img1 = cv2.imread('')  # 1. 图像读取
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 2. 彩色图转灰度图
_, img_bin = cv.threshold(img_gray, th1, th2, cv2.THRESH_BINARY)  # 3. 二值化图像
img = cv2.convertScaleAbs(img, alpha=2, beta=0) # 
cv2.imwrite('pic/bear_gray.jpg', img_gray) # 4. 保存图像
 

4 几何变换

4.1 图像放缩

  1. dst = cv2.resize(src,dsize[,dst[,fx[,fy[,interpolation]]]])
  2. dst = cv2.resize(img,dsize = (100,100))
  3. dst = cv2.resize(img,None,fx=0.5,fy=0.5) # 水平和垂直方向的缩放
  4. INTER_NEAREST,INTER_LINEAR

(1)设置新图片大小

# 用resize放缩
import cv2 
img1 = cv2.imread('')
img2 = cv2.resize(img2,(100,100))  # col,row
cv2.imshow('img1',img1)
cv2.imshow('mg2',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

(2)用fx,fy放缩

# 用fx,fy放缩
import cv2 
img1 = cv2.imread('')
img2 = cv2.resize(img2,None,fx=0.5,fy=0.5) # col,row
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

(3)最近邻插值实现放缩
1.shape=[h,w],shape_new=[h1,w1],img_new,img_new[i,j]=img[int(i*(h/h1)),int(j*(w/w1))]

# 用fx,fy放缩
import cv2 
img = cv2.imread('')
h,w,d = img.shape
img_new  = np.zeros([h1,w1,d],np.uint8)
h1,w1,_ = img_new.shape

for i in range(h1):
    for j in range(w1):
        img_new[i,j] = img[int(i*(h*1.0/h1)),int(j*(w*1.0/w1))]

cv2.imshow('img',img)
cv2.imshow('img_new',img_new)
cv2.waitKey(0)
cv2.destroyAllWindows()

(4)双线性插值法实现放缩
1.shape=[h,w],shape_new=[h1,w1],img_new,img_new[i,j]=img[int(i*(h/h1)),int(j*(w/w1))]

'''
6   6.3  7 

7

7.8

8
'''

import cv2 
img = cv2.imread('')
h,w,d = img.shape
img_new  = np.zeros([h1,w1,d],np.uint8)
h1,w1,_ = img_new.shape

for i in range(h1):
    for j in range(w1):
        i_new = np.round(i*(h*1.0/h1),1) # 6.3,7.8   
        j_new = np.round(j*(w*1.0/w1),1)  
        i_new1,i_new2 = str(i_new).split('.')
        j_new1,j_new2 = str(i_new).split('.')
        i_new1 = np.int8(i_new1)
        i_new2 = np.int8(i_new2)
        j_new1 = np.int8(j_new1)
        j_new2 = np.int8(j_new2)
        img_11 = img[i_new1,j_new1]
        img_12 = img[i_new1+1,j_new1]
        img_21 = img[i_new1,j_new1+1]
        img_22 = img[i_new1+1,j_new1+1]
        r1 = img_11*(1-i_new2*0.1) +  img_12*(i_new2*0.1)
        r2 = img_21*(1-i_new2*0.1) +  img_22*(i_new2*0.1)
        r =  r1*(1-j_new2*0.1) + r2*(j_new2*0.1)
        img_new[i,j] = r
cv2.imshow('img',img)
cv2.imshow('img_new',img_new)
cv2.waitKey(0)
cv2.destroyAllWindows()

(5)仿射实现放缩

import cv2
import numpy as np
from matplotlib.pyplot as plt
img = cv2.imread('',1)
cv2.imshow('img',img)
heigh ,width,_= img.shape
matScale = np.float32([[0.5,0,0],[0,0.5,0]]) 
dst = cv2.warpAffine(img,matScale,(int(heigh/2),int(width/2))) 
plt.show(dst)

4.2 图像翻转

dst = cv2.flip(src,flipCode) # flipCode:1 (== 0) 以x轴反转;(> 0)2 以x轴反转;3 (< 0)先以x轴反转,再以x轴反转;

(1) 上下翻转

'''
𝑥=𝑥0
y = fH-y0
x    -1  0  fw   x0
y  =  0  1   0   y0
1     0  0   1   1

'''
# 1 上下翻转
import cv2 
img1 = cv2.imread('')
img2 = cv2.flip(img1,0)
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

(2)左右翻转


'''
𝑥=𝑓𝑊−𝑥0
𝑦=𝑦0
x    -1  0  fw   x0
y  =  0  1   0   y0
1     0  0   1   1

'''
# 1 左右翻转
import cv2 
img1 = cv2.imread('')
img2 = cv2.flip(img1,1)
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

(3)先上下翻转,再左右翻转

'''
x =
y = fH-y0
x    -1  0  fW   x0
y  =  0 -1  fH   y0
1     0  0   1   1

'''
# 1 先上下翻转,再左右翻转
import cv2 
img1 = cv2.imread('')
img2 = cv2.flip(img1,-1)
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

(4) python实现图像翻转

import cv2
import numpy as np
import matplotlib.pyplot as plt
img2 = cv2.imread('./2.png')
img2.resize([266,266,3])
r,c,_= img2.shape
img_ = np.zeros_like(img2,dtype = np.uint8)
for j in range(c):
    img_[:,j,:] = img2[:,c-1-j,:]
plt.show(img_) 

(5) python实现图像镜像

import cv2
import numpy as np
import matplotlib.pyplot as plt
img2 = cv2.imread('./2.png')

r,c,_= img2.shape
img_ = np.zeros([r*2,c,3],dtype = np.uint8)
for i in range(r):
    img_[i] = img2[i]
    img_[r*2-1-i] = img2[i]
img_[r-1:r+2] = [255,255,255]
plt.show(img_)    

(6) 通过仿射实现镜像

import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('./2.png')
mirrorM = np.array([
    [-1, 0, 333],
    [0,  1, 0]
], dtype=np.float32)

img_mirr = cv2.warpAffine(img, mirrorM, dsize=img.shape[:2][::-1])
plt.show(img_mirr) 

4.3 图像平移

(1) 坐标平移

'''
x = x0 + dx
y = y0 + dy

x     1  0  dx     x0
y  =  0  1  dy  *  y0
1     0  0   1      1
'''
# 1 坐标平移
import cv2
import numpy as np
import matplotlib.pyplot as plt
img1 = cv2.imread('1.png')
img1.shape
img1.resize([266,266,3])
img_ = np.zeros_like(img1,dtype = np.uint8)
img_[100:,100:,:] = img2[:166,:166,:]
plt.imshow(img_)


(2)用opencv函数实现图片位移

'''
1 移位矩阵
2 仿射变换
'''
import cv2 as cv
import numpy as np
img = cv.imread('',1)
cv.imshow('img',img)
r,c,_ = img.shape
matShift = np.float32([[1,0,100],[0,1,200]]) # 2*3 移位矩阵
dst = cv2.warpAffine(img,matShift,(600,600))       # 矩阵移位
cv2.imshow('dst',dst)
cv2.waitKey(3)

4.4 图像错切

(1) 水平错切

'''
# 水平错切
x = x0 + tan0*y0

x     1  tan0    0     x0
y  =  0    1     0  *  y0
1     0    0     1      1

# 垂直错切
y = y0 + tan0*x0

x     1      0   0      x0
y  = tan0    1   0  *   y0
1     0      0   1      1


'''

import cv2
import numpy as np
import matplotlib.pyplot as plt
img2 = cv2.imread('./2.png')
img2.resize([266,266,3])
r,c,_= img2.shape
theta = np.pi/4
t = np.tan(theta)
img_ = np.zeros_like(img2,dtype = np.uint8)
for i ,j in zip(range(r),range(c)):
    x_ = int(i+j*t)
    if r-x_ > 0:
        img_[i,x_:,:] = img2[i,:r-x_ ,:]
plt.imshow(img_)

用opencv函数实现错切
```python
'''
x     1  tan0    0     x0
y  =  0    1     0  *  y0
1     0    0     1      1
'''
import cv2 as cv
import numpy as np
img = cv.imread('',1)
cv.imshow('img',img)
r,c,_ = img.shape
tan_0 = np.tan(np.pi/10)
matShift = np.float32([[1,tan_0,0],[0,1,0]])   # 2*3 移位矩阵
dst = cv2.warpAffine(img,matShift,(r,c))       # 矩阵移位
cv2.imshow('dst',dst)
cv2.waitKey(3)

(2) 垂直错切


import cv2
import numpy as np
import matplotlib.pyplot as plt
img2 = cv2.imread('./2.png')
r,c,_= img2.shape
theta = np.pi/4
t = np.tan(theta)
img_ = np.zeros_like(img2,dtype = np.uint8)
for i ,j in zip(range(r),range(c)):
    y_ = int(j+i*t)
    if c-y_ > 0:
        img_[y_:,j,:] = img2[:c-y_ ,j,:]
plt.imshow(img_)

(3) 仿射错切


# 1水平错切
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('1.png')
tan0 = 0.01
transM = np.array([
    [1, tan0, 0],
    [0, 1, 0]
], dtype=np.float32)

img_trans = cv2.warpAffine(img, transM, dsize=(600, 600)) # transM:平移矩阵
dsize:平移后图片的新的宽高
plt.imshow(img_trans)

# 2 垂直错切
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('1.png')
tan0 = 0.01
transM = np.array([
    [1, 0, 0],
    [tan0, 1, 0]
], dtype=np.float32)

img_trans = cv2.warpAffine(img, transM, dsize=(600, 600)) # transM:平移矩阵
dsize:平移后图片的新的宽高
plt.imshow(img_trans)

4.4 图像旋转

'''
x     cosb   sinb    0      x0
y  = -sinb   cosb    0  *   y0
1      0      0      1      1

'''
import cv2 
import numpy as np
img2 = cv2.imread('./2.png',1)
heigh,width,_= img2.shape
matRotate = cv2.getRotationMatrix2D((heigh*0.5,width*0.5),45,0.5)  # scale = 0.5
dst = cv2.warpAffine(img,matRotate,(heigh,width))
cv2.imshow('dst',dst)
cv2.waitKey(3)

4.5 透视变换

1. cv.getPerspectiveTransform()
import cv2 
import numpy as np
img = cv2.imread('./2.png',1)
src = np.array([
    [210, 50],
    [610, 270],
    [650, 480],
    [150, 450]
], dtype=np.float32)
dst = np.array([  # 顺时针坐标
    [150, 50],
    [650, 50],
    [650, 480],
    [150, 480]
], dtype=np.float32)
M = cv2.getPerspectiveTransform(src, dst)
img_trans = cv.warpPerspective(img, M, dsize=(750, 500))
plt.imshow(img_trans)

4.6 图片仿射 (2D转化为3D)


import cv2 
import numpy as np
img2 = cv2.imread('./2.png',1)
heigh,width,_= img2.shape
matSrc = np.float32([[0,0],[0,heigh-1],[width-1,0]])  # 左上角、左下角,右下角坐标
matDst = np.float32([[50,50],[100,heigh-200],[width-300,100]])  # 左上角、左下角,右下角坐标
matAffine = cv2.getAffineTransform(matSrc,matDst)
dst = cv2.warpAffine(img,matAffine,(heigh,width))
cv2.imshow('dst',dst)
cv2.waitKey(3)

4.6 图片灰度处理

Gray=(R+G+B)/3
Gray=(R0.299+G0.587+B*0.114))

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 1 读入时设置位灰度 
img0 = cv2.imread('./2.png',0) # 灰度
img1 = cv2.imread('./2.png',1) # 彩色BGR
# 2 转换颜色通道
dst = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)

# 3 Gray=(R+G+B)/3

b,g,r = cv2.split(img1)
dst = (b+g+r)/3
plt.imshow(dst)

# 4 Gray=(R*0.299+G*0.587+B*0.114))
gray = ((b)*0.299+(g)*0.587+(r)*0.114)/3
dst1= np.uint8(gray)
plt.imshow(dst1)

4.7 图片颜色反转

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 1 读入时设置位灰度 
img0 = cv2.imread('./2.png',0) # 灰度
img1 = cv2.imread('./2.png',1) # 彩色BGR
img1 = cv2.cvtColor(img1,cv2.COLOR_BGR2RGB)
b,g,r = cv2.split(img1)
dst = cv2.merge([255-b,255-g,255-r])
plt.imshow(dst)

4.8 图片马赛克

原理:马赛克区域为同一像素

'''
周围10*10用同一像素表示

'''
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('./2.png',1) # 彩色BGR
heigh,width,_ = img.shape

for m in range(100,300):
    for n in range(100,200):
        if m%10 == 0 and n%10==0:
            for i in range(0,10):
                for j in range(0,10):
                    (b,g,r) = img[m,n]
                    img[i+m,j+n] = (b,g,r)
plt.imshow(img)

4.9 毛玻璃

原理:当前像素为周围随机像素

import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('./2.png',1) # 彩色BGR
heigh,width,_ = img.shape

dst = np.zeros((heigh,width,3),np.uint8)
mn = 8
for m in range(heigh):
    for n in range(width):
        index = int(random.random()*8)
        (b,g,r) = img(m+index,n+index)
        dst[m,n] = (b,g,r)
plt.imshow(dst)

4.10 颜色映射


import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('./2.png',1) # 彩色BGR
heigh,width,_ = img.shape

dst = np.zeros((heigh,width,3),np.uint8)

for i in range(heigh):
    for j in range(width):
        (b,g,r) = img[i,j]
        b = b*1.5
        g = g*1.3
        if b > 255:
            b = 255
        if g > 255:
            g = 255
        dst = (b,g,r)
cv2.imshow('dst',dst)
cv2.waitKey(3)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值