【图像处理】opencv基本操作 读取 保存 像素 算法运算

目录

1.图像基本操作

1.1 读取,显示,保存

1.2 像素操作

1.3 查看图像性质

1.4 图像区域

1.5 图像通道

1.6 图像边框

* 小结

2.图像算法运算

2.1 图像加法

2.2 图像融合

2.3 性能衡量


1.图像基本操作

1.1 读取,显示,保存

import numpy as np
import cv2 as cv
​
# 读取图片
# cv.imread('图片完整名',标志)
# 标志:
# 1:cv.IMREAD_COLOR 加载彩色图形(默认),忽视透明度。
# 0:cv.IMREAD_GRAYSCALE:以灰度模式加载图像。
# -1:cv.IMREAD_UNCHANGED:加载图像,包括alpha通道。
img=cv.imread('1.jpg',1)
​
# 显示图像
# cv.imshow('窗口名',图片对象)
cv.imshow('1',img)
​
# 保存图像
# cv.imwrite('文件名',对象名)
cv.imwrite('copy1.jpg',img)
cv.waitKey(0) # 等待键盘命令

1.2 像素操作

## 访问像素值
# 方法一:通用于选择数组的区域
# 对象名[行,列]
print("RGB:",img[99,99])
print("R:", img[99, 99, -1])
print("G:", img[99, 99, 1])
print("B:", img[99, 99, 0])
# 修改像素值
img[99,99]=[255,255,255]
print(img[99,99])
​
# 方法二:适用于单个像素访问
# 对象名.item(x,y,channel)
img.item(99,99,2)
# 修改像素值
# img.itemset((x,y,channl),新像素值)
img.itemset((99,99,2),0)
print(img[99,99])

1.3 查看图像性质

## 查看图像形状
# 对象.shape
print("shape:",img.shape)
## 查看像素总数
# 对象.size
print("size:",img.size)
## 查看图像数据类型
# 对象.dtype
print("dtype:",img.dtype)

1.4 图像区域

## 指定图像区域
ball=img[100:150,100:150]
cv.imshow("ball",ball)

1.5 图像通道

## 拆分图像通道
b,g,r=cv.split(img) # 耗时
print("b,g,r:",b,g,r)
## 合并图像通道
img=cv.merge((b,g,r))
## 将所有重复像素设为0
# 0,1,2分别是b,g,r的通道
img[:,:,2]=0

1.6 图像边框

## 设置图像边框
# cv.copyMakeBorder(src,边界宽度,边框类型)
# src - 输入图像
# top,bottom,left,right 边界宽度(以相应方向上的像素数为单位)
# borderType - 定义要添加哪种边框的标志。它可以是以下类型:
# cv.BORDER_CONSTANT - 添加恒定的彩色边框。该值应作为下一个参数给出。
# cv.BORDER_REFLECT - 边框将是边框元素的镜像。
# value -边框的颜色。
constant= cv.copyMakeBorder(img,10,10,10,10,cv.BORDER_CONSTANT,value=[0,0,0])

* 小结

import numpy as np
import cv2 as cv
​
img=cv.imread('copy1.jpg')
​
## 访问像素值
# 方法一:通用于选择数组的区域
# 对象名[行,列]
print("RGB:",img[99,99])
print("R:", img[99, 99, -1])
print("G:", img[99, 99, 1])
print("B:", img[99, 99, 0])
# 修改像素值
img[99,99]=[255,255,255]
print(img[99,99])
# 方法二:适用于单个像素访问
# 对象名.item(x,y,channel)
img.item(99,99,2)
# 修改像素值
# img.itemset((x,y,channl),新像素值)
img.itemset((99,99,2),0)
print(img[99,99])
​
## 查看图像形状
# 对象.shape
print("shape:",img.shape)
## 查看像素总数
# 对象.size
print("size:",img.size)
## 查看图像数据类型
# 对象.dtype
print("dtype:",img.dtype)
​
## 指定图像区域
ball=img[100:150,100:150]
cv.imshow("ball",ball)
​
## 拆分图像通道
b,g,r=cv.split(img) # 耗时
print("b,g,r:",b,g,r)
## 合并图像通道
img=cv.merge((b,g,r))
## 将所有重复像素设为0
# 0,1,2分别是b,g,r的通道
img[:,:,2]=0
​
## 设置图像边框
# cv.copyMakeBorder(src,边界宽度,边框类型)
# src - 输入图像
# top,bottom,left,right 边界宽度(以相应方向上的像素数为单位)
# borderType - 定义要添加哪种边框的标志。它可以是以下类型:
# cv.BORDER_CONSTANT - 添加恒定的彩色边框。该值应作为下一个参数给出。
# cv.BORDER_REFLECT - 边框将是边框元素的镜像。
# value -边框的颜色。
constant= cv.copyMakeBorder(img,10,10,10,10,cv.BORDER_CONSTANT,value=[0,0,0])
cv.imshow("constant",constant)
cv.waitKey(0)

2.图像算法运算

2.1 图像加法

res=img1+img2 => cv.add(img1,img2)

  • 两个图像应应有相同深度和类型,或第二个图像是标量。

import numpy as np
import cv2 as cv
​
x=np.uint8([250])
y=np.uint8([10])
# 250+10= 260=>255
print(cv.add(x,y)) # [[255]]
# 250+10= 260%256 =4
print(x+y) # [4]

2.2 图像融合

权重不同的图像加法。

G(x)=(1−α)f_0(x)+αf_1(x)

  • α:融合权重。

  • 函数:

cv.addWeighted(scr1,
               scr1的融合比重alpha,
               scr2,
               scr2的融合比重beta,
               加权后图像偏移量gamma
              )
  • 函数计算公式:

dst(I)=saturate(src1(I)∗alpha+src2(I)∗beta+gamma)

import numpy as np
import cv2 as cv
​
img1=cv.imread("./image/cow.jpg")
img2=cv.imread("./image/flower.jpg")
dst=cv.addWeighted(img1,0.8,img2,0.2,0)
cv.imshow('dst',dst)
cv.waitKey(0)

2.3 性能衡量

测量代码执行时间。

e1 = cv.getTickCount()
# 你的执行代码
e2 = cv.getTickCount()
time = (e2 - e1)/ cv.getTickFrequency()

你可能感兴趣的:(图像处理,opencv,计算机视觉,图像处理)