openCV基础,基于Python

1. 图像的读取,显示和保存

首先在python中安装opencv, 在终端命令行输入pip install opencv-python 即可。
#导入cv2的库
import cv2 as cv
#图像读取
img = cv.imread(“img.jpg”)
#显示图像
cv.imshow(“img”, img)
#使图像持久显示在桌面上
cv.waitKey(0)
cv.destroyAllWindows()
#将图像保存到pictures 目录下,名称为pic.jpg
cv.imwrite(“pictures/pic.jpg”, img)

2.像素值的读取

  1. 图像可以分为二值图像, 灰度图像, 彩色图像。
    二值图像的像素值非黑即白。
    灰度图像的像素值在0-255之间,只有一个通道。
    彩色图像的像素值也在0-255之间, 由三个通道组成,在opencv中分别是G,B, R 即绿蓝红。
    获取图像的某快区域,并将改变其像素。
    在这里插入图片描述
    在这里插入图片描述
import cv2 as cv 
import numpy as np 
img = cv.imread("java.jpg")
img[100: 150, 100: 150] = 255
cv.imwrite("java_changd.jpg", img)
cv.imshow("img_changed", img)
cv.waitKey(0)
cv.destroyAllWindows()
  1. 获取单个像素点
    灰度图像
import cv2 as cv 
import numpy as np 
#cv.IMREAD_GRAYSCALE,这个参数表示以灰度图方式读入,也可以直接写0代替。 写这个参数默认以彩色形式读入,这时候不会将灰色图自动上色,而是将单通单转成三通道。
img = cv.imread("java.jpg", cv.IMREAD_GRAYSCALE)
#使用img.item() 来读取像素点,参数是坐标值
pix = img.item(45, 50)
print(pix) # 2
import cv2 as cv 
import numpy as np 

img = cv.imread("java.jpg")

#彩色图像有三个通道,blue读取蓝色通道的像素点,green 读取green通道的像素值
blue = img.item(45, 45, 0)
green = img.item(45, 45, 1)
red = img.item(45, 45, 2)
print(blue)
print(green)
print(red)
#打印结果
#
5
3
2

3. 获取图像的属性

得到图像的形状,总的像素的大小,像素的数据类型

import cv2 as cv 
import numpy as np 

img = cv.imread("java.jpg")
print(img.shape) #图片的形状
print(img.size)#图像大小,长度, 宽度和高度乘积
print(img.dtype)#0-255是无符号的8位二进制

"""
(300, 532, 3)
478800
uint8
"""

彩色图像的通道拆分

import cv2 as cv 
import numpy as np 

img = cv.imread("java.jpg")
#分别取出图像的三个通道的值,每个通道是2维的
blue, green, red = cv.split(img)
print(blue.shape)
print(green.shape)
print(red.shape)
cv.imshow("img", img)
cv.imshow("blue", blue)
cv.imshow("green", green)
cv.imshow("red", red)
cv.waitKey(0)
cv.destroyAllWindows()

4. 像素的运算

图像放缩 ,修改图像的大小cv.resize()

import cv2 as cv 
import numpy as np 

# read images
img1 = cv.imread("java.jpg")
# 第一种方法, 直接输入原图像的要修改的大小
resize1 = cv.resize(img1, (300, 300))
# 第二种方法,按照比例缩放,None表示不指定新的shape, 而是通过比例缩放
resize2 = cv.resize(img1, None, fx=1.2, fy=0.5)

print(resize1.shape)
print(resize2.shape)
cv.waitKey(0)
cv.destroyAllWindows()

将两幅图像进行加法运算,np.add() 和cv2.add() 都可以完成加法预案算, 但结果有所不同, np.add() 会将加法运算后超过255的像素进行取模运算, 如结果是256 , 则为了避免像素值在0-255之间, 会进行取模运算, 即 256 % 255 = 1.
cv2.add() 会把超过255的值当做255处理

image1
在这里插入图片描述

image2
在这里插入图片描述
np.add() 的结果
在这里插入图片描述

cv.add() 的结果
在这里插入图片描述

import cv2 as cv 
import numpy as np 

# read images
img1 = cv.imread("java.jpg")
img2 = cv.imread("yese.jpg")
# cv.resize() 修改图像的大小,在进行运算之前要先将图像修剪成统一大小
img1 = cv.resize(img1, (300, 300))
img2 = cv.resize(img2, (300, 300))

add1 = np.add(img1, img2)
add2 = cv.add(img1, img2)


cv.imshow("img1", img1)
cv.imshow("img2", img2)
cv.imshow("add1", add1)
cv.imshow("add2", add2)
cv.imwrite("add1.jpg", add1)
cv.imwrite("add2.jpg", add2)
cv.waitKey(0)
cv.destroyAllWindows()

图像融合
使用cv.addWeighted()将两幅图像进行加权融合。
在这里插入图片描述

import cv2 as cv 
import numpy as np 

# read images
img1 = cv.imread("java.jpg")
img2 = cv.imread("yese.jpg")
img1 = cv.resize(img1, (300, 300))
img2 = cv.resize(img2, (300, 300))
# img1 * 0.3 + img2 * 1 , 最后一个参数表示亮度调整, 0代表不做改变, 也不能省略
add = cv.addWeighted(img1, 0.3, img2, 1, 0)
cv.imwrite("add.jpg", add)
cv.imshow("add_weighted", add)
cv.waitKey(0)
cv.destroyAllWindows()

图像翻转
cv.flip()

import cv2 as cv 
import numpy as np 
# read images
img = cv.imread("java.jpg")
# 第二个参数控制翻转的方向
img1 = cv.flip(img, 1)
cv.imshow("img", img)
cv.imshow("img1", img1)
cv.imwrite("flip.jpg", img1)
cv.waitKey(0)
cv.destroyAllWindows()

原图
在这里插入图片描述
翻转后的图像
在这里插入图片描述

import cv2 as cv 
import numpy as np 

# read images
img = cv.imread("java.jpg")
# 第二个参数控制翻转的方向
img1 = cv.flip(img, 0)
cv.imshow("img", img)
cv.imshow("img1", img1)
cv.imwrite("flip.jpg", img1)
cv.waitKey(0)
cv.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41559533/article/details/84289983