OpenCV系列__chapter2

这里写目录标题

    • [1 图像加减乘除位运算](#1 图像加减乘除位运算)
      • [1.1 加法 img = cv2.add(img1, img2)](#1.1 加法 img = cv2.add(img1, img2))
      • [1.2 减法 img = cv2.subtract(img1, img2)](#1.2 减法 img = cv2.subtract(img1, img2))
      • [1.3 乘法 img = cv2.multiply(img1, img2)](#1.3 乘法 img = cv2.multiply(img1, img2))
      • [1.4 除法 img = cv2.divide(img1, img2)](#1.4 除法 img = cv2.divide(img1, img2))
      • [1.5 位运算 cv2.bitwise_and()](#1.5 位运算 cv2.bitwise_and())
    • [2 图像增强](#2 图像增强)
      • [2.1 线性变换](#2.1 线性变换)
      • [2.2 非线性变换](#2.2 非线性变换)
    • [3 图像几何变换](#3 图像几何变换)
      • [3.1 裁剪、放大、缩小](#3.1 裁剪、放大、缩小)
      • [3.2 平移变换](#3.2 平移变换)
      • [3.3 错切变换](#3.3 错切变换)
      • [3.4 镜像变换](#3.4 镜像变换)
      • [3.5 旋转变换](#3.5 旋转变换)
      • [3.6 透视变换](#3.6 透视变换)
      • [3.7 最近邻插值、双线性插值](#3.7 最近邻插值、双线性插值)

1 图像加减乘除位运算

1.1 加法 img = cv2.add(img1, img2)

python 复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt

lena = cv2.imread('lenacolor.png',-1)
noise = np.random.randint(0,255,lena.shape,dtype=np.uint8)
img_add = lena+noise
img_cv_add = cv2.add(lena,noise)

plt.subplot(221)
plt.title('lena')
plt.imshow(lena[...,::-1])
plt.subplot(222)
plt.title('noise')
plt.imshow(noise[...,::-1])
plt.subplot(223)
plt.title('img_add')
plt.imshow(img_add[...,::-1])
plt.subplot(224)
plt.title('img_cv_add')
plt.imshow(img_cv_add[...,::-1])
plt.show()

1.2 减法 img = cv2.subtract(img1, img2)

python 复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt

img_0 = cv2.imread('34.jpeg',-1)
img_1 = cv2.imread('35.jpeg',-1)
img_sub = cv2.subtract(img_0, img_1)

plt.subplot(131)
plt.title('img_0')
plt.imshow(img_0[...,::-1])
plt.subplot(132)
plt.title('img_1')
plt.imshow(img_1[...,::-1])
plt.subplot(133)
plt.title('img_sub')
plt.imshow(img_sub[...,::-1])
plt.show()
python 复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt

img_0 = cv2.imread('img_no.png',0)
img_1 = cv2.imread('sub.png',0)
img_sub = cv2.subtract(img_0, img_1)

plt.subplot(131)
plt.title('img_0')
plt.imshow(img_0,cmap='gray')
plt.subplot(132)
plt.title('img_1')
plt.imshow(img_1,cmap='gray')
plt.subplot(133)
plt.title('img_sub')
plt.imshow(img_sub,cmap='gray')
plt.show()

1.3 乘法 img = cv2.multiply(img1, img2)

python 复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt

lena = cv2.imread('lenacolor.png',-1)
mask = np.zeros_like(lena,np.uint8)
mask[204:392,213:354] = 1
img_mul = cv2.multiply(lena, mask)

plt.subplot(131)
plt.title('lena')
plt.imshow(lena[...,::-1])
plt.subplot(132)
plt.title('mask')
plt.imshow(mask[...,::-1])
plt.subplot(133)
plt.title('img_mul')
plt.imshow(img_mul[...,::-1])
plt.show()

1.4 除法 img = cv2.divide(img1, img2)

python 复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt

lena = cv2.imread('lenacolor.png',0)
img_noise = cv2.circle(lena.copy(),(280,300),150,(0,255,0),10)
img_div = cv2.divide(img_noise,lena)

plt.subplot(131)
plt.title('lena')
plt.imshow(lena,cmap='gray')
plt.subplot(132)
plt.title('img_noise')
plt.imshow(img_noise,cmap='gray')
plt.subplot(133)
plt.title('img_div')
plt.imshow(img_div,cmap='gray')
plt.show()

1.5 位运算 cv2.bitwise_and()

python 复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt

lena = cv2.imread('lenacolor.png',1)
mask = np.zeros_like(lena,dtype=np.uint8)
mask = cv2.circle(mask,(280,280),111,(255,255,255),-1)
re = cv2.bitwise_and(lena,mask)

plt.subplot(131)
plt.title('lena')
plt.imshow(lena[...,::-1])
plt.subplot(132)
plt.title('mask')
plt.imshow(mask[...,::-1])
plt.subplot(133)
plt.title('re')
plt.imshow(re[...,::-1])
plt.show()
python 复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt

lena = cv2.imread('lenacolor.png',1)
mask = np.zeros(lena.shape[:2],dtype=np.uint8)
mask = cv2.circle(mask,(280,280),111,(255,255,255),-1)
re = cv2.bitwise_and(lena,lena,mask=mask)

plt.subplot(131)
plt.title('lena')
plt.imshow(lena[...,::-1])
plt.subplot(132)
plt.title('mask')
plt.imshow(mask,'gray')
plt.subplot(133)
plt.title('re')
plt.imshow(re[...,::-1])
plt.show()

2 图像增强

2.1 线性变换

python 复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('lianhua.png',1)
re = img*2+10
re = re.astype(np.uint8)
re1 = cv2.convertScaleAbs(img, alpha=2, beta=10)

plt.subplot(131)
plt.title('img')
plt.imshow(img[...,::-1])
plt.subplot(132)
plt.title('re0')
plt.imshow(re0[...,::-1])
plt.subplot(133)
plt.title('re1')
plt.imshow(re1[...,::-1])
plt.show()

2.2 非线性变换

python 复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt

## 1 gamma
def gamma_aug(img,c,gamma):
  gamma_table=[c*np.power(x/255.0,gamma)*255.0 for x in range(256)]
  gamma_table=np.round(np.array(gamma_table)).astype(np.uint8)
  return cv2.LUT(img,gamma_table)


## 2 log
def log_aug(img,c,r):
  gamma_table=[c*np.log10(1+x/255.0*r)*255.0 for x in range(256)]
  gamma_table=np.round(np.array(gamma_table)).astype(np.uint8)
  return cv2.LUT(img,gamma_table)

if __name__ == '__main__':
  img = cv2.imread('lianhua.png',1)
  img11 =  gamma_aug(img,c=1,gamma=0.1)
  img12 = gamma_aug(img, c=1, gamma=0.8)
  img21 = log_aug(img, c=1, r=10)
  img22 = log_aug(img, c=2, r=10)

  plt.subplot(231)
  plt.title('img')
  plt.imshow(img[...,::-1])
  plt.subplot(232)
  plt.title('img11')
  plt.imshow(img11[..., ::-1])
  plt.subplot(233)
  plt.title('img12')
  plt.imshow(img12[..., ::-1])
  plt.subplot(234)
  plt.title('img')
  plt.imshow(img[...,::-1])
  plt.subplot(235)
  plt.title('img21')
  plt.imshow(img21[..., ::-1])
  plt.subplot(236)
  plt.title('img22')
  plt.imshow(img22[..., ::-1])
  plt.show()

3 图像几何变换

3.1 裁剪、放大、缩小

(1) 公式缩放

python 复制代码
'''
dst = cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR)
参数:
 src : 输入图像
 dsize: 绝对尺寸,直接指定调整后图像的大小
 fx,fy: 相对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可
 interpolation:插值方法(INTER_NEAREST,INTER_LINEAR)
'''

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

img = cv2.imread('lenacolor.png',1)
img1 = cv2.resize(img,(100,100))           # dsize
img2 = cv2.resize(img,None,fx=0.5,fy=0.5)  # fx,fy

plt.subplot(131)
plt.title(f'img.shape:{format(img.shape[:2])}')
plt.imshow(img[..., ::-1])
plt.subplot(132)
plt.title(f'img1.shape:{format(img1.shape[:2])}')
plt.imshow(img1[..., ::-1])
plt.subplot(133)
plt.title(f'img2.shape:{format(img2.shape[:2])}')
plt.imshow(img2[..., ::-1])
plt.show()

(2) 最近邻源码缩放

python 复制代码
'''
 img[100,100,3] --> img1 [10,10,3]  scale = 10/100   (5,5)-->5/scale -->(50,50)
'''
import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('lenacolor.png',1)
h,w,c = img.shape
h1,w1,d = 100,200,c
h_scale = h1*1.0/h
w_scale = w1*1.0/w
img_new = np.zeros([h1,w1,d],np.uint8)

for i in range(h1):
 for j in range(w1):
     img_new[i,j] = img[int(i/h_scale),int(j/w_scale)]

plt.subplot(121)
plt.title(f'img.shape:{format(img.shape[:2])}')
plt.imshow(img[..., ::-1])
plt.subplot(122)
plt.title(f'img_new.shape:{format(img_new.shape[:2])}')
plt.imshow(img_new[..., ::-1])

(3) 最近邻

python 复制代码

3.2 平移变换

python 复制代码

3.3 错切变换

python 复制代码

3.4 镜像变换

python 复制代码

3.5 旋转变换

python 复制代码

3.6 透视变换

python 复制代码

3.7 最近邻插值、双线性插值

python 复制代码
相关推荐
神的泪水2 小时前
CANN 系列底层篇:基于 shmem 实现 NPU 设备内存的高效共享
人工智能
皮卡丘不断更2 小时前
手搓本地 RAG:我用 Python 和 Spring Boot 给 AI 装上了“实时代码监控”
人工智能·spring boot·python·ai编程
浪子小院2 小时前
ModelEngine 智能体全流程开发实战:从 0 到 1 搭建多协作办公助手
大数据·人工智能
程序员打怪兽2 小时前
详解YOLOv8网络结构
人工智能·深度学习
Yuer20252 小时前
全国首例“AI 幻觉”侵权案判了:这不是 AI 准不准的问题,而是谁该为 AI 负责
人工智能·edca os·可控ai
爱打代码的小林2 小时前
基于 MediaPipe 实现实时面部关键点检测
python·opencv·计算机视觉
一切尽在,你来2 小时前
1.1 AI大模型应用开发和Langchain的关系
人工智能·langchain
Coder_Boy_3 小时前
基于Spring AI的分布式在线考试系统-事件处理架构实现方案
人工智能·spring boot·分布式·spring
Light603 小时前
智链未来:彭山物流园区从物理基建到数据智能体的全维度构建方案
人工智能·系统架构·数字孪生·智慧物流·实施路径·彭山项目
AI资源库3 小时前
GLM-4.7-Flash模型深入解析
人工智能·语言模型