【OpenCV基础2】图像运算、水印、加密、摄像头

目录

一、图像运算

1、利用"+"

2、cv2.add()

3、掩膜异或

二、摄像头

1、读取、视频流保存

2、人脸识别

三、数字水印

1、水印嵌入

​2、水印提取

四、图像加密


一、图像运算

1、利用" +"

python 复制代码
import cv2

'''
利用"+"方法将两幅图像相加
'''
img1 = cv2.imread('project_demo/class_picture/2.jpeg')
img2 = cv2.imread('project_demo/class_picture/3.jpeg')

height1, width1 = img1.shape[:2]
img2 = cv2.resize(img2, (width1, height1))

img4 = img1 + img2

cv2.imshow('img4', img4)
cv2.waitKey(0)
cv2.destroyAllWindows()

2、cv2.add()

python 复制代码
import cv2

'''
利用cv2.add()方法将两幅图像相加
'''
img1 = cv2.imread('project_demo/class_picture/2.jpeg')
img2 = cv2.imread('project_demo/class_picture/3.jpeg')

height1, width1 = img1.shape[:2]
img2 = cv2.resize(img2, (width1, height1))

img3 = cv2.add(img1, img2)

cv2.imshow('img3', img3)
cv2.waitKey(0)
cv2.destroyAllWindows()

3、掩膜异或

python 复制代码
'''
将 lena_gray.jpg 以单通道方式读入,然后生成两个与该图片一样大的掩膜,其中
a) mask的像素为全零
b) mask的像素为全255
尝试将单通道的lena图像与两个掩膜进行异或操作
'''
img = cv2.imread('project_demo/class_picture/lena_gray.jpg', 0)
mask = np.zeros_like(img)
mask2 = np.ones_like(img) * 255
masked_img = cv2.bitwise_xor(img, mask)
masked_img2 = cv2.bitwise_xor(img, mask2)
cv2.imshow('masked_img', masked_img)
cv2.imshow('masked_img2', masked_img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

二、摄像头

1、读取、视频流保存

python 复制代码
'''
编写Python脚本,使用OpenCV库打开摄像头。
捕获摄像头视频流,并分别使用OpenCV或ffmpeg等工具将视频保存为I420、XVID和MP4V格式
'''
import cv2
import numpy as np

def create_video_writer(filename, fourcc, fps, frame_size):
    """创建视频写入器"""
    return cv2.VideoWriter(filename, fourcc, fps, frame_size)

cap = cv2.VideoCapture(0)

# 获取视频的基本信息
fps = 60.0  # 设置帧率
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
frame_size = (frame_width, frame_height)

# 创建不同格式的视频写入器
i420_writer = create_video_writer('project_demo/output_i420.avi', 
                                cv2.VideoWriter_fourcc(*'I420'), 
                                fps, frame_size)
xvid_writer = create_video_writer('project_demo/output_xvid.avi', 
                                cv2.VideoWriter_fourcc(*'XVID'), 
                                fps, frame_size)
mp4v_writer = create_video_writer('project_demo/output_mp4v.mp4', 
                                cv2.VideoWriter_fourcc(*'MP4V'), 
                                fps, frame_size)

print("开始录制视频,按'q'键停止...")

while True:
    # 读取一帧
    ret, frame = cap.read()
    if not ret:
        print("无法获取摄像头画面")
        break
    
    # 写入各个格式的视频文件
    i420_writer.write(frame)
    xvid_writer.write(frame)
    mp4v_writer.write(frame)
    
    # 显示实时预览
    cv2.imshow('Video Recording', frame)
    
    # 按'q'键退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        print("录制结束")
        break

# 释放所有资源
cap.release()
i420_writer.release()
xvid_writer.release()
mp4v_writer.release()
cv2.destroyAllWindows()

2、人脸识别

python 复制代码
'''
用OpenCV捕获摄像头视频流,并调整每一帧图像的分辨率为1024x768。
加载人脸检测的分类器(如Haar级联分类器或深度学习模型)。
对每一帧图像进行人脸检测。
在检测到的人脸周围绘制蓝色矩形框进行标注。
显示标注后的图像
'''

import cv2

# 加载Haar级联分类器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

# 打开摄像头
cap = cv2.VideoCapture(0)

while True:
    # 读取一帧
    ret, frame = cap.read()
    if not ret:
        print("无法获取摄像头画面")
        break
    
    # 调整分辨率为1024x768
    frame = cv2.resize(frame, (1024, 768))
    
    # 转换为灰度图像
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
    # 人脸检测
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
    
    # 绘制蓝色矩形框
    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
    
    # 显示标注后的图像
    cv2.imshow('Face Detection', frame)
    
    # 按'q'键退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放资源
cap.release()
cv2.destroyAllWindows()

三、数字水印

1、水印嵌入

python 复制代码
'''
读取原始图像(如lean_gray.jpg或lena_gray.jpg)和水印图像(如treasure1.jpeg或1.jpeg)。
对水印图像进行预处理,如缩小尺寸、灰度化、二值化等。
选择嵌入位置或策略(如LSB最低有效位法),将水印信息嵌入到原始图像的像素中。
保存嵌入水印后的图像。
'''
import cv2
import numpy as np

def embed_watermark(original_image_path, watermark_image_path, output_image_path):
    # 读取原始图像和水印图像
    original_img = cv2.imread(original_image_path, cv2.IMREAD_GRAYSCALE)
    watermark_img = cv2.imread(watermark_image_path, cv2.IMREAD_GRAYSCALE)

    # 调整水印图像大小与原始图像一致
    watermark_img = cv2.resize(watermark_img, (original_img.shape[1], original_img.shape[0]))

    # 二值化水印图像
    _, watermark_img = cv2.threshold(watermark_img, 128, 255, cv2.THRESH_BINARY)

    # 将水印嵌入到原始图像的最低有效位
    embedded_img = np.bitwise_and(original_img, 0xFE) | (watermark_img >> 7)

    # 保存嵌入水印后的图像
    cv2.imwrite(output_image_path, embedded_img)

# 示例调用
embed_watermark('lean_gray.jpg', 'treasure1.jpeg', 'embedded_image.png')

2、水印提取

python 复制代码
'''
读取嵌入水印后的图像。
根据嵌入策略,从图像的像素中提取出水印信息。
对提取出的水印进行后处理,如放大、灰度化等,以便于观察。
显示提取出的水印图像。
'''
import cv2
import numpy as np

def extract_watermark(embedded_image_path, output_watermark_path):
    # 读取嵌入水印后的图像
    embedded_img = cv2.imread(embedded_image_path, cv2.IMREAD_GRAYSCALE)

    # 提取水印信息
    extracted_watermark = np.bitwise_and(embedded_img, 0x01) * 255

    # 保存提取出的水印
    cv2.imwrite(output_watermark_path, extracted_watermark)

# 示例调用
extract_watermark('project_demo/class_picture/embedded_image.png', 
'project_demo/class_picture/extracted_watermark.png')

四、图像加密

python 复制代码
'''
加载图像并检测人脸:
使用OpenCV加载图像。
使用OpenCV自带的人脸检测器(如Haar级联分类器)检测人脸位置。
对人脸区域进行打码:

获取检测到的人脸区域坐标。
对该区域进行模糊处理,或使用其他加密手段(如马赛克、模糊、添加噪声等)。

保存打码后的图像:
保存处理后的图像,以便后续解码。
对打码图像进行解码:

加载打码后的图像。
重新检测人脸区域。
使用解码方法还原被打码的人脸区域(例如,使用预先保存的原始人脸区域进行替换)。
'''
import cv2
import numpy as np


img = cv2.imread("project_demo/class_picture/lena_color.jpg")
cv2.imshow("image",img)
mask = np.zeros(img.shape,np.uint8)
face = np.random.randint(0,255,(180,140,3))
mask[90:270,200:340,:] = face
img2 = cv2.bitwise_xor(img,mask)
cv2.imshow("image2",img2)
img3 = cv2.bitwise_xor(img2,mask)
cv2.imshow("image3",img3)
cv2.waitKey(0)
cv2.destroyAllWindows()
相关推荐
数据与人工智能律师18 分钟前
AI的法治迷宫:技术层、模型层、应用层的法律痛点
大数据·网络·人工智能·云计算·区块链
椒颜皮皮虾྅20 分钟前
【DeploySharp 】基于DeploySharp 的深度学习模型部署测试平台:安装和使用流程
人工智能·深度学习·开源·c#·openvino
迈火1 小时前
PuLID_ComfyUI:ComfyUI中的图像生成强化插件
开发语言·人工智能·python·深度学习·计算机视觉·stable diffusion·语音识别
AI新兵2 小时前
AI大事记10:从对抗到创造——生成对抗网络 (GANs)
人工智能·神经网络·生成对抗网络
却道天凉_好个秋2 小时前
深度学习(十五):Dropout
人工智能·深度学习·dropout
你好~每一天3 小时前
2025 中小企业 AI 转型:核心岗技能 “怎么证、怎么用”?
人工智能·百度·数据挖掘·数据分析·职业·转行
飞哥数智坊4 小时前
3B参数差点干翻32B模型,Qwen3 Next 是如何做到的?
人工智能
人工智能技术派4 小时前
Whisper推理源码解读
人工智能·语言模型·whisper·语音识别
编码追梦人5 小时前
AI 重塑行业格局:从金融风控到智能制造的深度实践
人工智能·制造
Lululaurel5 小时前
提示工程深度解析:驾驭大语言模型的艺术与科学
人工智能·ai·aigc·提示词