IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python opencv 将lena图像嵌入空白画布处 -> 正文阅读

[Python知识库]python opencv 将lena图像嵌入空白画布处

import cv2
import matplotlib.pyplot as plt
import numpy as np
path = "./temp(1)/temp/src.jpg"
threshold = 80

读取图像

img = cv2.imread(path)
img = img[:,:,::-1]
img.shape
plt.imshow(img)
plt.axis('off')
plt.show()

在这里插入图片描述

# 转化灰度
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_gray.shape
plt.imshow(img_gray, cmap='gray')
plt.axis('off')
plt.show()

在这里插入图片描述

# 高斯模糊
img_gray = cv2.GaussianBlur(img_gray, (3, 3), 1)
plt.imshow(img_gray, cmap='gray')
plt.axis('off')
plt.show()

在这里插入图片描述

二值转化

_, img_br = cv2.threshold(img_gray, threshold, 255, cv2.THRESH_BINARY)
plt.imshow(img_br, cmap='gray')
plt.axis('off')
plt.show()

在这里插入图片描述

# 寻找外层轮廓
contours, hierarchy = cv2.findContours(img_br, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 确保至少找到一个轮廓
contour = np.zeros((4, 2))
if len(contours) > 0:
    # 按轮廓大小降序排列
    cnts = sorted(contours, key=cv2.contourArea, reverse=True)
    for c in cnts:
        # 近似轮廓
        peri = cv2.arcLength(c, True)
        approx = cv2.approxPolyDP(c, 0.02 * peri, True)
        # 近似轮廓有四个点,则确定
        if len(approx) == 4:
            contour = approx
            break

# 保留轮廓图片
img_contour = img.copy()
cv2.drawContours(img_contour, [contour], 0, (0, 0, 255), 1)
cv2.imwrite("./contour.png",img_contour)
cour = cv2.imread('./contour.png')
plt.imshow(cour)
plt.axis('off')
plt.show()

在这里插入图片描述

# 读取目标图片
dst = cv2.imread("./temp(1)/temp/dst.jpg")
# dst = cv2.imread("./temp(1)/temp/7.jpg")
# dst = cv2.imread('fish.jpg')
plt.imshow(dst[:,:,::-1])
plt.axis('off')
plt.show()

在这里插入图片描述

# 初始化原图Mask
mask = np.zeros_like(img)
# 获取子图长宽,赋给mask
h, w, c = dst.shape
mask[:h, :w, :] = 255
# mask 透射变换
# 得到变换矩阵
# 初始mask点
point1 = np.float32([[0, 0], [0, h - 1], [w - 1, h - 1], [w - 1, 0]])
# 目标mask点
point2 = np.float32(contour.reshape(4, 2))
# 得到变换矩阵
perspective_matrix = cv2.getPerspectiveTransform(point1, point2)
# 得到里白外黑mask
mask_center_true = cv2.warpPerspective(mask, perspective_matrix, (img.shape[1], img.shape[0]))
plt.imshow(mask_center_true)
plt.axis('off')
plt.show()

在这里插入图片描述

# 取图
mask_center_roi = cv2.bitwise_and(img,mask_center_true)
plt.imshow(mask_center_roi)
plt.axis('off')
plt.show()
# 反取mask
temp = np.ones_like(img) * 255
mask_center_false = cv2.bitwise_xor(mask_center_true,temp)
plt.imshow(mask_center_false)
plt.axis('off')
plt.show()
# and
src_center_false = cv2.bitwise_and(img,mask_center_false)
plt.imshow(src_center_false)
plt.axis('off')
plt.show()
# 得到dst透射变换
temp = np.zeros_like(img)
temp[:h,:w,:] = dst
dst_center_true = cv2.warpPerspective(temp, perspective_matrix, (img.shape[1], img.shape[0]))
plt.imshow(dst_center_true[:,:,::-1])
plt.axis('off')
plt.show()

在这里插入图片描述

# 融合
result = cv2.bitwise_or(src_center_false[:,:,::-1],dst_center_true)
plt.imshow(result[:,:,::-1])
plt.axis('off')
plt.show()

在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-15 15:29:40  更:2021-08-15 15:29:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 12:47:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计