写在前面:

因为经常需要用到opencv,又经常忘记很多用过的方法,所以写个文章给记下来好了。

你一定见过她

1 安装OpenCv

通常安装opencv只需要这么一行命令就可以做到了。

pip3 install opencv-python

在不那么通常的情况下,我们需要使用Anaconda来安装,这个以后再说。

在非常不通常的情况下,我们需要直接下载源码编译安装,这是及其痛苦的。

2 基本图像操作方法

你应该知道:

  • 什么是数组
  • 在C语言中数组的存储方式
  • 图片就是数组

2.1 从摄像头获取一张图片

import cv2
import numpy
cap = cv2.VideoCapture(0) #创建VideoCapture对象

while(True): #创建无限循环,用于播放每一帧图像

    ret, frame = cap.read() #读取图像的每一帧
    print(frame)

    cv2.imshow('frame',frame) #显示帧

    #等待1毫秒,判断此期间有无按键按下,以及按键的值是否是Esc键

    if cv2.waitKey(1) & 0xFF == 27:

        break #中断循环

cap.release() #释放ideoCapture对象

cv2.destroyAllWindows()

2.1.2 从文件中读取一张图片或是视频中的一帧


imgFile = "../images/sakara.jpg"  # 读取文件的路径
img1 = cv2.imread(imgFile, flags=1)  # flags=1 读取彩色图像(BGR)
img2 = cv2.imread(imgFile, flags=0)  # flags=0 读取为灰度图像

2.2 改变图片的大小

# 读取图片 

image = cv2.imread('image.jpg') 

cv2.imshow('Original Image', image) 

# 让我们使用新的宽度和高度缩小图像 

down_width = 300 

down_height = 200 

down_points = (down_width, down_height) 

resized_down = cv2.resize(image, down_points, interpolation= cv2.INTER_LINEAR)

传递给resize函数的是 图像对象,宽/高的元组 ,缩放a方法(这里用线性

2.3 把图片叠在另一张图片上

很简单,用numpy自带的数组索引就可以

black_img[0:10, 0:10] = img[0:10, 0:10]

把 后面 img 叠在 black_img 上面

3 实例

3.1

import time

import cv2
import numpy as np
path = "sakara.png"
wei = 640
hei = 480
cut_times = 640
# 对图像进行预处理的函数,传递参数:宽度,高度,图像数组,切片次数
img = cv2.imread(path, 1)

def pre_make(weight, height, img, img_cut_times):

    if img_cut_times > weight:
        raise ValueError("cut times is more than img weight")
    else:
        pass

    size_of_pic = (weight, height)
    # 需要识别的图片大小

    # 图片切片数量
    cut = 0
    point_list = []
    df = weight/(img_cut_times)
    while cut < img_cut_times:
        cut += 1
        point_list.append(int(df*cut))
    # 计算需要裁剪的点位置

    img = cv2.resize(img, size_of_pic, interpolation=cv2.INTER_LINEAR)
    black_img = np.zeros((height, weight, 3), np.uint8)
    black_img.fill(0)
    # 生成一张纯黑图片

    # 要 进 来 力 !
    for position in point_list:

        black_img[0:height, (weight-position):weight] = img[0:height, 0:position]
        cv2.imshow("cancan",black_img)
        cv2.waitKey(1)

    # 黑 化 力 !
    black_img.fill(0)

    # 要 出 去 力 !
    for position in point_list:

        black_img[0:height, 0:(weight-position)] = img[0:height, position:weight]
        cv2.imshow("cancan", black_img)
        cv2.waitKey(1)
        black_img.fill(0)


pre_make(wei, hei, img, cut_times)

3.2

"""旨在自动计算亮度,调节图片亮度"""
import cv2
import numpy as np

def calculate_brightness(image):
# 将图像转换为灰度图
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 计算灰度图的平均像素值,即亮度值
brightness = np.mean(gray_image)
return brightness

def adjust_brightness(image, target_brightness):
# 计算当前图像亮度
current_brightness = calculate_brightness(image)

# 计算亮度调整系数
brightness_ratio = target_brightness / current_brightness

# 调整图像亮度
adjusted_image = cv2.convertScaleAbs(image, alpha=brightness_ratio, beta=0)

return adjusted_image

if __name__ == "__main__":
# 读取图像
#image_path = "IMG/photo/10.jpg"
#image = cv2.imread(image_path)
cap = cv2.VideoCapture(0)
while True:
ret,image = cap.read()
image = cv2.resize(image, (720,480), interpolation=cv2.INTER_LINEAR)
# 自动计算图像亮度
brightness = calculate_brightness(image)
print("当前图像亮度:", brightness)

# 设置目标亮度(可以根据需要进行调整)
target_brightness = 190

# 调整图像亮度
adjusted_image = adjust_brightness(image, target_brightness)

# 显示原始图像和调整后的图像
cv2.imshow("Original Image", image)
cv2.imshow("Adjusted Image", adjusted_image)

# 保存调整后的图像
cv2.imwrite("adjusted_image.jpg", adjusted_image)

cv2.waitKey(1)
cv2.destroyAllWindows()