当前位置: 首页 > news >正文

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

目录

一、图像运算

1、利用“+”

2、cv2.add()

3、掩膜异或

二、摄像头

1、读取、视频流保存

2、人脸识别

三、数字水印

1、水印嵌入

​2、水印提取

四、图像加密


一、图像运算

1、利用“+”

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 + img2cv2.imshow('img4', img4)
cv2.waitKey(0)
cv2.destroyAllWindows()

2、cv2.add()

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、掩膜异或

'''
将 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脚本,使用OpenCV库打开摄像头。
捕获摄像头视频流,并分别使用OpenCV或ffmpeg等工具将视频保存为I420、XVID和MP4V格式
'''
import cv2
import numpy as npdef 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、人脸识别

'''
用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# 调整分辨率为1024x768frame = 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、水印嵌入

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

'''
读取嵌入水印后的图像。
根据嵌入策略,从图像的像素中提取出水印信息。
对提取出的水印进行后处理,如放大、灰度化等,以便于观察。
显示提取出的水印图像。
'''
import cv2
import numpy as npdef 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')

四、图像加密

'''
加载图像并检测人脸:
使用OpenCV加载图像。
使用OpenCV自带的人脸检测器(如Haar级联分类器)检测人脸位置。
对人脸区域进行打码:获取检测到的人脸区域坐标。
对该区域进行模糊处理,或使用其他加密手段(如马赛克、模糊、添加噪声等)。保存打码后的图像:
保存处理后的图像,以便后续解码。
对打码图像进行解码:加载打码后的图像。
重新检测人脸区域。
使用解码方法还原被打码的人脸区域(例如,使用预先保存的原始人脸区域进行替换)。
'''
import cv2
import numpy as npimg = 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()

相关文章:

  • 如何在 Windows 11 或 10 上安装 FlutterFire CLI
  • CSS提高性能的方法有哪些
  • C++面试4-sizeof解析
  • RabbitMQ的简介
  • C 语言学习笔记(函数2)
  • AI在网络安全中的应用之钓鱼邮件检测
  • Python列表 vs 元组:全面对比解析(新手友好版)
  • MYSQL8.0常用窗口函数
  • input组件使用type=“number“的时候,光标自动跳到首位
  • 【Tools】VMware Workstation 17.6 Pro安装教程
  • 在 CentOS 7.9 上部署 node_exporter 并接入 Prometheus + Grafana 实现主机监控
  • PyMOL命令行和脚本
  • 精益数据分析(70/126):MVP迭代中的数据驱动决策与功能取舍
  • AI神经网络降噪 vs 传统单/双麦克风降噪的核心优势对比
  • 公网ip是固定的吗?动态ip如何做端口映射?内网ip怎么让外网远程访问?
  • 组态王通过开疆智能profinet转ModbusTCP网关连接西门子PLC配置案例
  • 学习BI---QuickBI介绍
  • ngx_http_scgi_module 技术指南
  • 问题 | 代码审查:函数是否包含返回语句
  • 调研函模板可参考,以无人机职业技能调研为例
  • 国家话剧院上海演出季7月重启,《大宅门》等5部大戏来沪
  • 牛市早报|年内首次存款利率下调启动,5月LPR今公布
  • 韦尔股份拟更名豪威集团:更全面体现公司产业布局,准确反映未来战略发展方向
  • 搜狐一季度营收1.36亿美元,净亏损同比收窄超两成
  • 证监会副主席李明:近期将出台深化科创板、创业板改革政策措施
  • 美国务卿与以色列总理通话,讨论加沙局势