实践-给图片右下角加opencv-logo

目录

使用掩码对lena图像的脸部进行打码、解码

给图像加密/解密


读取大图和logo原图

复制代码
lena = cv2.imread('D:\lene02.png',1)`  `# 选择了一张分辨率更大的图片,更改图片路径`
`logo = cv2.imread('D:\cv-log.png',1)`
`

用到的图片:

裁剪过的lena

提取大图右下角ROI

复制代码
h1, w1, c1 = lena.shape`
`h2, w2, c2 = logo.shape`
`#` `定位大图右下角区域roi,使其具有logo的尺寸`
`roi = lena[h1-h2:h1,w1-w2:w1]`

`# 注意:对roi的操作就是对lena原图的操作`
`cv2.imwrite('D:\lene02.png',roi)`
`plt.imshow(roi[:,:,::-1])`
`

把logo原图转换为灰度图

图片:

opencv的logo

利用cv2.cvtColor得到灰度图gray

复制代码
gray = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY)`
`cv2.imwrite('D:\cv-log.png',gray)`
`plt.imshow(gray, cmap='gray')`
`

通过二值化获取抛弃logo前景的掩码图

使用OTSU二值化方法进行二值化ret, mask1 =

复制代码
ret, mask1 = cv2. threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)`
`cv2.imwrite('D:\cv-log.png',mask1)`
`plt.imshow(mask1, cmap='gray')`
`

二值化也就是保留黑白

通过按位与获得只有大图背景而logo前景挖空的局部图

mask1与roi进行按位与,fg1 = cv2.bitwise_and()

复制代码
fg1 = cv2.bitwise_and(roi,roi,mask=mask1)`
`cv2.imwrite('D:\cv-log.png',fg1)`
`plt.imshow(fg1[:,:,::-1])`
`

其实也就是图片的像素叠层,logo的前景像素覆盖掉lena图片的对应像素

通过二值化获取保留logo前景的掩码图

使用BINARY_INV方法进行二值化ret, mask2 =

复制代码
ret, mask2 = cv2.threshold(gray,220,255,cv2.THRESH_BINARY_INV)`
`cv2.imwrite('D:\cv-log.png',mask2)`
`plt.imshow(mask2, cmap='gray')`
`

通过按位与获得只有logo前景而背景挖空的局部图

mask2与logo进行按位与,fg2 = cv2.bitwise_and

复制代码
fg2 = cv2.bitwise_and(logo,logo,mask=mask2)`
`cv2.imwrite('D:\cv-log.png',fg2)`
`plt.imshow(fg2[:,:,::-1])`
`

提取过后的logo

通过add()函数把两个局部图相加

roi[:]=cv2.add

复制代码
roi[:]=cv2.add(fg1,fg2)`  `#加上":"是为了确保原图的提取`
`cv2.imwrite('D:\cv-log.png',roi)`
`plt.imshow(roi[:,:,::-1])`
`

提取后的roi视图

把合成照片放回Lena照片的右下角

复制代码
lena[h1-h2:h1,w1-w2:w1]` `= roi`
`plt.imshow(lena[:,` `:,` `::-1])`
`plt.xticks([]), plt.yticks([])`
`

不打印坐标,这是原图视图

使用掩码对lena图像的脸部进行打码、解码

复制代码
lena = cv2.imread(image_path)` 
`h,w, _ = lena.shape # 图片的行(高)h、列(宽)w`
`

只显示lena脸部,其他部分打码

复制代码
mask1 = np.zeros((h,w), dtype=np.uint8)`  `#生成一个掩膜图像(任何一个数与0与运算都是0,任何一个数与1与运算都是这个数本身)`
`mask1[200:400,` `200:380]=255`              `#这个掩膜图像大小是lena.shape的大小,像素值是0或255`
`# # 或者用cv2.selectROI自己选取ROI区域`
`# TODO: lena_face = cv2.bitwise_and()`
`lena_face = cv2.bitwise_and(lena,lena,mask = mask1)`
`imgs = np.hstack([lena, lena_face])`
`plt.imshow(imgs[:,` `:,` `::-1])`
`

去掉Lena脸部

复制代码
mask2 = np.ones((h,w), dtype=np.uint8)*255`  
`mask2[200:400,` `200:380]=0` 
`# TODO:lena_no_face = cv2.bitwise_and()`
`lena_no_face = cv2.bitwise_and(lena ,lena , mask=mask2)`     

`imgs = np.hstack([lena, lena_no_face])`
`plt.imshow(imgs[:,` `:,` `::-1])`
`

给lena脸部打彩色码

复制代码
lena_no_face_color = lena.copy()`
`ROI =np.random.randint(0,`
                      `256,`
`                      size=(400-200,380-200,3),`
`                      dtype = np.uint8)`
`lena_no_face_color[200:400,` `200:380]` `= ROI`
`imgs = np.hstack([lena, lena_no_face_color])`
`plt.imshow(imgs[:,` `:,` `::-1])`
`

原理是随机的生成0-255的像素值(点)

ROI =np.random.randint(0,

256,

size=(400-200,380-200,3),

dtype = np.uint8)

给图像加密/解密

随机生成密钥图像,尺寸跟lena图像相同

复制代码
#生成一个随机密钥图像`
`key = np.random.randint(0,`
                       `256,`
`                       size=(h,w,3),`
`                       dtype = np.uint8)`
`#1、使用密钥key对lena整体加密`
`lena_encryption = cv2.bitwise_xor(lena,key)`  `# 在逻辑异或中,如果两个比特位相同,则结果为0;如果不同,则结果为1`
`plt.imshow(lena_encryption[:,` `:,` `::-1])`
`

只对lena脸部应用密钥进行解密(逻辑异或操作)

复制代码
face_only = lena_encryption.copy()`
`# face_only[200:400, 200:380] = lena_face[200:400, 200:380]`
`face_only[200:400,` `200:380]` `= cv2.bitwise_xor(face_only[200:400,` `200:380],key[200:400,` `200:380])`
`plt.imshow(face_only[:,` `:,` `::-1])`
`

使用密钥key对lena整体解密

复制代码
lena_decryption = cv2.bitwise_xor(lena_encryption,key)`
`plt.imshow(lena_decryption[:,` `:,` `::-1])`
`
相关推荐
jndingxin3 分钟前
OpenCV CUDA模块中逐元素操作------算术运算
人工智能·opencv·计算机视觉
一个Potato5 分钟前
Python面试总结
开发语言·python
无敌最俊朗@14 分钟前
**HTTP/HTTPS基础** - URL结构(协议、域名、端口、路径、参数、锚点) - 请求方法(GET、POST) - 请求头/响应头 - 状态码含义
爬虫·python·网络协议·http·https
白熊18825 分钟前
【图像生成大模型】Step-Video-T2V:下一代文本到视频生成技术
人工智能·opencv·yolo·计算机视觉·大模型·音视频
立秋678928 分钟前
从零开始:使用 PyTorch 构建深度学习网络
人工智能·pytorch·深度学习
21级的乐未央40 分钟前
论文阅读(四):Agglomerative Transformer for Human-Object Interaction Detection
论文阅读·深度学习·计算机视觉·transformer
知舟不叙1 小时前
基于OpenCV的实时文档扫描与矫正技术
人工智能·opencv·计算机视觉·透视变换·实时文档扫描与矫正
Blossom.1181 小时前
基于区块链技术的供应链溯源系统:重塑信任与透明度
服务器·网络·人工智能·目标检测·机器学习·计算机视觉·区块链
说私域1 小时前
O2O电商变现:线上线下相互导流——基于定制开发开源AI智能名片S2B2C商城小程序的研究
人工智能·小程序·开源·零售
xiaohanbao091 小时前
day29 python深入探索类装饰器
开发语言·python·学习·机器学习·pandas