Opencv中的copyTo()函数在opencv-Python中的实现

copyTo() 函数有两种方式

  • 第一种:src_Image.copyTo(dst_Image),表示将原图复制到目标图中。
  • 第二种:src_Image.copyTo(dst_Image, mask),表示得到一个附加掩膜mask的目标图

第一种方法比较简单,这列主要讲解第二种方法。

src_Image.copyTo(dst_Image, mask)

  • 大致过程是说:将src_Image图 对照着mask图复制到dst_Image图,最后得到dst_Image图。

  • 参数说明(原图需要和模板图有相同的大小,即高度,宽度,通道数都要相同,RGB图和GRAY图均可,只要他们相同大小,python中可用src_Image.shape查看图像大小)
    • src_Image:原图
    • dst_Image:结果图
    • mask:掩图

copyTo()的实现原理:

  • 在位置(x,y)时,如果mask的像素值不等于0,则dst(x,y) = src(x,y);
    如果mask的像素值等于0,则dst(x,y) = 0
  • 即在(x,y)处,当mask的像素值是0时,dst对应的像素就为0;当mask的像素值不是0时,dst对应的像素值为scr的像素值(下图方便理解)

代码实现

# 讲一下大致思路
import cv2
import numpy as npscr_Image = cv2.imread("原图")
mask = cv2.imread("掩图")
# 原图的高度和宽度
height = scr_Image.shape[0]
width = scr_Image.shape[1]
# 生成和原图一样高度和宽度的矩形(全为0)
dst_Image = np.zeros((height, width), np.uint8)# 以下是copyTo的算法原理:
# 先遍历每行每列(如果不是灰度图还需遍历通道,可以事先把mask图转为灰度图)
for row in range(mask.shape[0]):for col in range(mask.shape[1]):# 如果掩图的像素不等于0,则dst(x,y) = scr(x,y)if mask[row, col] != 0:# dst_image和scr_Image一定要高宽通道数都相同,否则会报错dst_Image[row, col] = scr_Image[row, col]  # 如果掩图的像素等于0,则dst(x,y) = 0elif mask[row, col] == 0:dst_Image[row, col] = 0cv2.imshow("结果图", dst_Image)
cv2.waitKey(0)
cv2.destroyAllWindows()

如果做的时候遇到如下的error,可能是图片的高宽通道数不一致,可以通过print(image.shape)来检查。

—ValueError: setting an array element with a sequence.

opencv中的copyTo函数在opencv-Python中的实现相关推荐

  1. opencv中伪彩色applyColorMap函数(C++ / Python)

    opencv中伪彩色applyColorMap函数(C++ / Python) 翻译 2017年06月23日 15:34:12 标签: 1654

  2. python中home定义是什么_第48p,什么是函数?,Python中函数的定义

    原标题:第48p,什么是函数?,Python中函数的定义 大家好,我是 杨数 Tos ,这是<从 零 基础到大神>系列课程的第 48 篇文章 ,第三阶段的课程 : Python进阶知识:详 ...

  3. python sum函数导入list_sum求和函数怎么在Python中使用

    sum求和函数怎么在Python中使用 发布时间:2021-01-12 15:10:47 来源:亿速云 阅读:55 作者:Leah 本篇文章为大家展示了sum求和函数怎么在Python中使用,内容简明 ...

  4. python中lambda函数if用法-Python中关于Lambda函数的使用总结

    lambda表达式是一种匿名函数,对应python中的自定义函数def,是定义某个函数时比较高级的一种写法.作为python初学者,本文整理了lambda的一些基本用法和特点. lambda和def的 ...

  5. python中的装饰器有哪些-python中的装饰器

    python的装饰器是用来装饰函数的.这是什么意思呢?假如我们有一个函数,这个函数的功能不能满足我们现有的需求,那么我们可以通过装饰器在这个函数执行前执行后做一些我们需要的操作(如果函数本身功能不满足 ...

  6. python中的命名空间_深入理解Python中的命名空间和范围

    Python中的命名空间和范围 在Python中,每个包.模块.类.函数和方法函数都拥有一个"名称空间",其中解析了变量名称.下面本篇文章就来带大家认识一下Python中的命名空间 ...

  7. python中输入字符串_简单讲解Python中的字符串与字符串的输入输出

    简单讲解Python中的字符串与字符串的输入输出 发布于 2016-03-26 14:35:42 | 110 次阅读 | 评论: 0 | 来源: 网友投递 Python编程语言Python 是一种面向 ...

  8. MYSQL中的REPLACE函数,以及Hive中的regexp_replace的用法

    MYSQL中的REPLACE函数,以及Hive中的regexp_replace的用法 一.repacle是什么? 二.使用步骤 1.实践是检验真理的唯一标准 2.Hive中的替换函数regexp_re ...

  9. python下载过程中最后一步执行opencv出错怎么回事_如何修复python中opencv中的错误“QObject::moveToThread:”?...

    我在python中使用opencv2和代码import cv2 cv2.namedWindow("output", cv2.WINDOW_NORMAL) cv2.imshow(&q ...

最新文章

  1. solidity 编程练习_学习Solidity编程语言并开始为区块链开发
  2. unicode字符显示方框_【硬核】韦东山:字符的编码方式
  3. pandas python csv_python:pandas合并csv文件的方法(图书数据集成)
  4. NavigationDrawer和NavigationView-Android M新控件
  5. Navicat下载和破解以及使用
  6. html5移动端底部效果,spring mvc +HTML5实现移动端底部上滑异步加载更多内容分页效果...
  7. mysql复制架构迁移到pxc_2020-03-18 Mysql常见的HA中间层架构mmm,pxc,mha
  8. SAP CRM呼叫中心里Case ID的生成逻辑
  9. cgi备份还原和ghost有什么区别_手动GHOST还原重装系统详细教程
  10. 二维数组和指针(包含交换二维数组行列)
  11. Java比较器-学习
  12. WinForm中的NotifyIcon控件的使用
  13. mysql教学磁力链_价值1000元的磁力链搜索源码PHP+python+mysql 一键搭建
  14. vue结合饿了么_饿了么vue实现学习笔记
  15. 文本分类入门(一)文本分类问题的定义
  16. 数据模型LP32 ILP32 LP64 LLP64 ILP64
  17. 中学教学01教学概述02教学过程03教学原则与方法
  18. 怎样基于power supply class编写PSY driver
  19. 如何为iPhone和iPad配置邮件设置
  20. 服务器的使用:基于centos7 搭建我的世界(Minecraft)游戏服务器

热门文章

  1. Linux -- Tomcat 8.5.55 版本的下载与升级
  2. WinForm Splash的简单实现
  3. 【PAT甲级题解记录】1148 Werewolf - Simple Version (20 分)
  4. 数据分发服务 (DDS)及Fast DDS环境搭建
  5. 查看3306端口被谁占用
  6. T3220,T1207,T1391,T1163
  7. LINUX如何让两个不同网段的主机进行通信与虚拟机上网设置
  8. Android状态栏/导航栏颜色虚拟键位颜色
  9. post 请求参数格式
  10. 【转】 快捷方式lnk文件格式详解(英文)(中文)