opencv中的copyTo函数在opencv-Python中的实现

大家好,我是知秋君,一个会写博客吟诗的知秋码农。今天说一说opencv中的copyTo函数在opencv-Python中的实现,希望能够帮助大家进步!!! Opencv中的copyTo()函数在opencv-Python中的实现 copyTo() 函数有两种方式 第一种:src_Image.copyTo(dst_Image),表示将 原图 复制到 目标图 中。 第二种:src_Image

大家好,我是知秋君,一个会写博客吟诗的知秋码农。今天说一说opencv中的copyTo函数在opencv-Python中的实现,希望能够帮助大家进步!!!

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 np scr_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) = 0 elif mask[row, col] == 0: dst_Image[row, col] = 0 cv2.imshow("结果图", dst_Image) cv2.waitKey(0) cv2.destroyAllWindows() 
只听到从知秋君办公室传来知秋君的声音:

何方圜之能周兮,夫孰异道而相安?屈心而抑志兮,忍尤而攘诟。有谁来对上联或下联?

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

—ValueError: setting an array element with a sequence.

知秋君
上一篇 2024-07-03 15:31
下一篇 2024-07-03 15:31

相关推荐