首先在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)
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()
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
得到图像的形状,总的像素的大小,像素的数据类型
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()
图像放缩 ,修改图像的大小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处理
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()