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 = approxbreak# 保留轮廓图片
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 opencv 将lena图像嵌入空白画布处相关推荐

  1. python opencv把一张图片嵌入(叠加)到另一张图片上

    python opencv把一张图片嵌入(叠加)到另一张图片上 1.背景: 最近做了个烟火生成系统的界面设计,需要将烟雾图片嵌入到任意一张图片中,因此需要python opencv把一张图片嵌入(叠加 ...

  2. 用python怎么样实现图像二值化_使用Python+OpenCV如何实现图像二值化

    使用Python+OpenCV如何实现图像二值化 发布时间:2020-10-26 14:15:52 来源:亿速云 阅读:77 作者:蛋片鸡 这篇文章运用简单易懂的例子给大家介绍使用Python+Ope ...

  3. Python+OpenCV:立体图像深度图(Depth Map from Stereo Images)

    Python+OpenCV:立体图像深度图(Depth Map from Stereo Images) 理论 If we have two images of same scene, we can g ...

  4. Python+OpenCV:交互式图像前景提取(Interactive Foreground Extraction using GrabCut Algorithm)

    Python+OpenCV:交互式图像前景提取(Interactive Foreground Extraction using GrabCut Algorithm) ################# ...

  5. 灰度拉伸python,Python OpenCV实例:图像灰度拉伸

    Python OpenCV实例:图像灰度拉伸 Python OpenCV实例:图像灰度拉伸 为什么80%的码农都做不了架构师?>>> #coding:utf-8 ''' 灰度拉伸 定 ...

  6. 【图像处理】——Python+opencv实现提取图像的几何特征(面积、周长、细长度、区间占空比、重心、不变矩等)

    转载请注明详细地址 本文简单介绍了图像常见几何特征的概念以及求解方法 本文介绍了Python和opencv求解几何特征的常用方法 目录 其他形状外接轮廓的方法可以参考:<OpenCV-Pytho ...

  7. python opencv 读取png图像的alpha通道

    关于python opencv加载png图像的文章非常少,由官方文档得知加参数cv2.IMREAD_UNCHANGED即可 img = cv2.imread(filepath, cv2.IMREAD_ ...

  8. Python OpenCV 图像处理之 图像运算和图像位运算知识补充

    Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧.本篇博客是这个系列的第 51 篇. 该系列文章导航参考:https://blog.csdn.net/hihell/categ ...

  9. Python | OpenCV画图显示为一个全黑画布的情况

    问题 之前写过一个博客:Python | 关于OpenCV和plt画图中数据类型不为unit8的问题 介绍当OpenCV和plt画图不为uint8的时候,怎么转换为Uint8. 但是之前只知道应该转换 ...

  10. python opencv 腐蚀_opencv 图像的腐蚀(erode)和膨胀(dilate) 开运算以及闭运算

    原文链接:opencv 图像的腐蚀(erode)和膨胀(dilate) 开运算以及闭运算 OpenCV---开闭操作 - 山上有风景 - 博客园 腐蚀 : 腐蚀操作会把前景物体的边缘腐蚀掉.原理是卷积 ...

最新文章

  1. 使用mint-ui开发项目的一些所得
  2. python搜索关键词自动提交订单_Python批量获取淘宝相关搜索和下拉框关键词
  3. 您的数据中心UPS电池开关不能再选错和接错了
  4. casio dt-930 条码采集器 盘点软件源程序
  5. 阿里 双11 同款流控降级组件 Sentinel Go 正式GA,云原生服务稳稳稳
  6. [Spring5]IOC容器_Bean管理_bean的作用域和bean的生命周期
  7. 6 Approximation and fitting
  8. 数据库表的字段中含空格怎么办?
  9. 月薪11万招数据工程师,看到要求我傻眼了!
  10. 《设计模式系列》---克隆模式
  11. labview与单片机正弦信号_LabVIEW小白入门——低通滤波器
  12. python 数据库中文乱码 Excel
  13. 【动态规划】01背包问题:猫狗大战
  14. python爬取网易云音乐付费音乐_python爬虫学习教程,爬取网易云音乐!
  15. android lomo设计与实现,拍静物 美图秀秀Android轻松调LOMO风格
  16. 卸载CTEX后再安装LaTex时会遇到的问题
  17. Biaofun分享给你什么是文案?
  18. 图解LeetCode——854. 相似度为 K 的字符串(难度:困难)
  19. android设置EditText为不可编辑状态
  20. 【LOJ #3084】【GXOI / GZOI2019】—宝牌一大堆(DP)

热门文章

  1. MIKE水动力笔记3_岸线及水深数据之根据遥感影像绘制岸线的方法
  2. 雨课堂《工程伦理》期末考试答案
  3. iOS应用支持IPV6,就那点事儿
  4. 运筹学 美国人在计算机上实现的四,运筹学试卷及答案
  5. opencv学习十二(车牌识别)
  6. 如何把Eclipse语言设置为中文(官方网址语言包)
  7. correlation 蒙特卡洛_蒙特卡洛模拟法
  8. Python设置随机数种子
  9. Jeecg框架中的一些常用属性(query,dictionary,funname,formatterjs,replace)
  10. 帆软教程:报表数据钻取