1.显示并打印图片的信息
import cv2 as cv
def get_image_info(image):
print(type(image))
print(image.shape)#打印宽高和通道数
print(image.size)#打印图片的尺寸
print(image.dtype)
src = cv.imread("D:/q.jpg") #获取图片路径
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)#显示图片
get_image_info(src)
cv.waitKey(0)
cv.destroyAllWindows()
2.Numpy数组的相关操作
import cv2 as cv
import numpy as np
def access_pixels(image):
print(image.shape)
height = image.shape[0]#获取图像的高
width = image.shape[1]#获取图像的宽
channels = image.shape[2]#获取通道数
print("width : %s height : %s channels : %s" % (width, height, channels))
#循环处理很慢不建议使用
for row in range(height):#改变每个点的像素
for col in range(width):
for cha in range(channels):
pv = image[row, col, cha]
image[row, col, cha] = 255 - pv
cv.imshow("pixels_demo", image)
def inverse(image):
dst = cv.bitwise_not(image)#每个像素点取反
cv.imshow("inverse dome", dst)
#创建一个图片
def create_image():
#创建一个每个像素点均为零的图片
img1 = np.zeros([400, 400, 3], np.uint8)
#给第一个通道赋值
img1[:, :, 0] = np.ones([400, 400]) * 255
cv.imshow("new img1", img1)
#写入图片
cv.imwrite("D:/img1.jpg", img1)
img2 = np.ones([400, 400, 3], np.float32)
cv.imshow("new img2", img2)
print(img2)
img3 = np.array([[20, 30, 40], [40, 50, 60], [70, 80, 90]])
cv.imshow("new img3", img3)
print(img3)
def main():
create_image()
cv.waitKey(0)
cv.destroyAllWindows()
main()
3.色彩空间的转换和目标的捕捉
import cv2 as cv
import numpy as np
#捕捉视频中的绿色目标
def extrace_object_demo():
capture = cv.VideoCapture("D:/p.mp4")
while True:
ret, frame = capture.read()
if ret == False:
break
#转换色彩空间
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
lower_hsv = np.array([37, 43, 46])
upper_hsv = np.array([77, 255, 255])
mask = cv.inRange(hsv, lowerb=lower_hsv, upperb=upper_hsv)
cv.imshow("video", frame)
cv.imshow("mask", mask)
c = cv.waitKey(40)
if c == 27:
break
#色彩空间的转换
def color_space_demo(image):
gray = cv.cvtColor(image, cv.COLOR_BAYER_BG2GRAY)
cv.imshow("gray", gray)
hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)
cv.imshow("hsv", hsv)
yuv = cv.cvtColor(image, cv.COLOR_BGR2YUV)
cv.imshow("yuv", yuv)
ycrcb = cv.cvtColor(image, cv.COLOR_BGR2YCrCb)
cv.imshow("ycrcb", ycrcb)
def main():
extrace_object_demo()
cv.waitKey(0)
cv.destroyAllWindows()
main()
4.像素运算
import cv2 as cv
import numpy as np
def add_demo(m1, m2):
dst = cv.add(m1, m2)
cv.imshow("add_demo", dst)
def subtract_demo(m1, m2):
dst = cv.subtract(m1, m2)
cv.imshow("subtract_demo", dst)
def divide_demo(m1, m2):
dst = cv.divide(m1, m2)
cv.imshow("divide_demo", dst)
def multiply_demo(m1, m2):
dst = cv.multiply(m1, m2)
cv.imshow("multiply_demo", dst)
def logic_and_demo(m1, m2):
dst = cv.bitwise_and(m1, m2)
cv.imshow("logic_and_demo", dst)
def logic_or_demo(m1, m2):
dst = cv.bitwise_or(m1, m2)
cv.imshow("logic_or_demo", dst)
def logic_xor_demo(m1, m2):
dst = cv.bitwise_xor(m1, m2);
cv.imshow("logic_xor_demo", dst)
def logic_not_demo(m1):
dst = cv.bitwise_not(m1)
cv.imshow("logic_not_demo", dst)
def contrast_brightness_demo(image, c, b):
h, w, ch = image.shape
blank = np.zeros([h, w, ch], image.dtype)
dst = cv.addWeighted(image, c, blank, 1-c, b)
cv.imshow("contrast_brightness_demo", dst)
def others(m1, m2):
M1, dev1 = cv.meanStdDev(m1)#求均值
M2, dev2 = cv.meanStdDev(m2)
h, w = m1.shape[:2]
print(M1)
print(M2)
print(dev1)
print(dev2)
img = np.zeros([h, w], np.uint8)
img.fill(255)
m, dev = cv.meanStdDev(img)
print(m)
print(dev)
cv.imshow("new img", img)
print("----------------hello Python---------------")
src1 = cv.imread("LinuxLogo.jpg")
src2 = cv.imread("WindowsLogo.jpg")
src = cv.imread("lena.png")
print(src1.shape)
print(src2.shape)
cv.imshow("image1", src1)
cv.imshow("image2", src2)
contrast_brightness_demo(src, 1.2, 100)
cv.imshow("image", src)
add_demo(src1, src2)
subtract_demo(src1, src2)
divide_demo(src1, src2)
multiply_demo(src1, src2)
others(src1, src2)
logic_and_demo(src1, src2)
logic_or_demo(src1, src2)
logic_xor_demo(src1, src2)
logic_not_demo(src1)
cv.waitKey(0)
cv.destroyAllWindows()
两张原始图片
进行加运算
进行减运算Linux - Windows
进行乘运算
进行与运算
进行或运算
进行异或运算
Linux进行取反运算