超详细注释之OpenCV操作图像平移转换

这篇博客将介绍如何使用Python,OpenCV对图像进行平移转换。平移是图像沿x轴和y轴的移动。使用平移,可以将图像上下左右移动,以及上述任意组合。要使用OpenCV平移图像,只需3步:

  1. 从磁盘加载图像
  2. 定义仿射变换矩阵
  3. 应用cv2.warpAffine仿射函数来执行平移

1. 效果图

用了颖宝明兰的新娘图片来演示效果~,喜欢这张图的原因,是这里有一首经典的催妆诗,

《催妆诗》
金车欲上怯东风,排云见月醉酒空。
独自仙姿羞半吐,冰瓷露白借微红。

原图如下:

向右向下平移图 VS 向上向左平移图 VS 向下平移效果图如下:

2. 原理

转化矩阵

M = np.float32([
[1, 0, shiftX],
[0, 1, shiftY]
])

转换矩阵M被定义为浮点数组。 矩阵的第一行是[1,0,t{x}],其中t{x}是将图像向左或向右移动的像素数。t{x}的负值将使图像向左移动,正值将使图像向右移动。 矩阵的第二行定义为[0,1,t{y}],其中t{y}是将图像上下移动的像素数。t{y}的负值将使图像上移,正值将使图像下移。

3. 源码

# 对图像进行平移
# USAGE
# python opencv_translate.py

import argparse

import cv2
import imutils
# 导入必要的包
import numpy as np

# 构建命令行参数及解析
# --image 输入图像路径
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", type=str, default="ml.jpg",
                help="path to the input image")
args = vars(ap.parse_args())

# 从磁盘加载图像并显示
image = cv2.imread(args["image"])
image = imutils.resize(image, width=300)
cv2.imshow("Original", image)

# 将图像向右移动25像素,像下移动50像素
M = np.float32([[1, 0, 25], [0, 1, 50]])
shifted = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))
cv2.imshow("Shifted Down and Right", shifted)

# 修改图像向左移动50像素,向上移动90像素
M = np.float32([[1, 0, -50], [0, 1, -90]])
shifted = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))
cv2.imshow("Shifted Up and Left", shifted)

# 用一行代码实现平移——imutils.translate
shifted = imutils.translate(image, 0, 100)
cv2.imshow("Shifted Down", shifted)
cv2.waitKey(0)

cv2.destroyAllWindows()

参考

到此这篇关于超详细注释之OpenCV操作图像平移转换的文章就介绍到这了,更多相关OpenCV图像平移转换内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • OpenCV图像处理之自定义滤波

    目录 1 空间滤波 1.1 滤波过程 1.2 相关和卷积 2 OpenCV 函数 2.1 filter2D 函数 2.2 flip 函数 3 代码示例 3.1 偏导数 参考资料 总结 图像处理中,"空间域" 指的是图像平面,因此,空间滤波可定义为:在图像平面内对像素灰度值进行的滤波 1 空间滤波 1.1 滤波过程 如图,Filter 是一个 3x3 滤波核,当它从图像的左上角开始,逐个像素沿水平方向扫描,最后到右下角时,便会产生滤波后的图像 假设输入图像 $f(x, y)$,滤波后的图

  • Opencv图像处理:如何判断图片里某个颜色值占的比例

    一.功能 这里的需求是,判断摄像头有没有被物体遮挡.这里只考虑用手遮挡---->判断黑色颜色的范围. 二.使用OpenCV的Mat格式图片遍历图片 下面代码里,传入的图片的尺寸是640*480,判断黑色范围. /* 在图片里查找指定颜色的比例 */ int Widget::Mat_color_Find(QImage qimage) { Mat image = QImage2cvMat(qimage);//将图片加载进来 int num = 0;//记录颜色的像素点 float rate;//要计

  • Python Opencv图像处理基本操作代码详解

    1.图像读取 使用cv2.imread(filepath,flags)读入图像 filepath: 读入图像完整路径(绝对路径,相对路径) flags: 读入图像标志 cv2.IMREAD_COLOR:默认参数,读入一副彩色图,忽略alpha通道:可以通过1指定 cv2.IMREAD_GRAYSCALE:读入灰度图片 也通过0指定 cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通道 import cv2 img1 = cv2.imread('C:/star.png',1)

  • 超详细注释之OpenCV操作图像平移转换

    这篇博客将介绍如何使用Python,OpenCV对图像进行平移转换.平移是图像沿x轴和y轴的移动.使用平移,可以将图像上下左右移动,以及上述任意组合.要使用OpenCV平移图像,只需3步: 从磁盘加载图像 定义仿射变换矩阵 应用cv2.warpAffine仿射函数来执行平移 1. 效果图 用了颖宝明兰的新娘图片来演示效果~,喜欢这张图的原因,是这里有一首经典的催妆诗, <催妆诗> 金车欲上怯东风,排云见月醉酒空. 独自仙姿羞半吐,冰瓷露白借微红. 原图如下: 向右向下平移图 VS 向上向左平移

  • 超详细注释之OpenCV制作图像Mask

    这篇博客将介绍如何使用OpenCV制作Mask图像掩码.使用位运算和图像掩码允许我们只关注图像中感兴趣的部分,截取出任意区域的ROIs. 应用: 图像感兴趣区域的截取: 图像融合:构建透明的叠加层: 1. 效果图 原始图如下:(老九门颖宝&佛爷~) 矩形掩码 VS 效果图如下:(使用矩形掩码,只提取图像中包含人物的区域,而忽略其他区域) 圆形掩码 VS 效果图如下:(圆形掩模显示在左边,掩模的应用在右边.实质上可以使用任意形状的掩码图像,如矩形.圆.线.多边形等从图像中提取区域) 2. 源码 #

  • 超详细注释之OpenCV更改像素与修改图像通道

    这篇博客将介绍使用Python,OpenCV获取.更改像素,修改图像通道,截取图像感兴趣ROI:单通道图,BGR三通道图,四通道透明图,不透明图: 1. 效果图 原图 VS 更改右下某个像素为红色,更改左上角1/4区域为绿色,效果图如下: 裁剪感兴趣区域:分别截取左上角.右上角.左下角.右下角,各占1/4:效果图如下: 原图 VS 图像单通道灰度图效果如下: 左上原图 VS 右上R通道图 VS 左下G通道图 VS 右下B通道图效果如下: 图像4通道 全透明图 VS 不透明效果图: 2. 源码 #

  • 超详细注释之OpenCV按位AND OR XOR和NOT

    这篇博客将介绍如何使用OpenCV应用按位AND.OR.XOR和NOT.上一篇学习了如何从图像中裁剪和提取感兴趣的区域(ROI),截取的都是矩形.但是如果想裁剪一个非矩形区域呢?该怎么办? 答案是同时应用位运算和掩蔽. AND:当且仅当两个像素都大于零时,按位AND为真. OR:如果两个像素中的任何一个大于零,则按位或为真. XOR:当且仅当两个像素中的一个大于零,而不是两个都大于零时,按位异或为真. NOT:按位NOT反转图像中的"开"和"关"像素. 比较好记的是

  • 超详细注释之OpenCV旋转图像任意角度

    上一篇博客介绍了 如何使用Python,OpenCV上下左右(或任意组合)平移图像.这篇博客将介绍如何使用OpenCV旋转图像任意角度.并演示如何使用imutils库中的两个函数imutils.rotate和imutils.rotate_bound不丢失细节的旋转图像. 使用OpenCV应用图像旋转时,有3种方法实现: cv2.getRotationMatrix2D 和 cv2.warpAffine: imutils.rotate 同方法1(可能局部丢失): imutils.rotate_bou

  • 超详细注释之OpenCV Haar级联检测器进行面部检测

    目录 1. 效果图 2. 原理 2.1 Haar级联是什么? 2.2 Haar级联的问题与局限性 2.3 Haar级联预训练的模型 3. 源码 3.1 图像检测 3.2 实时视频流检测 参考 这篇博客将介绍如何使用预训练好的OpenCV Haar级联人脸.眼睛.嘴部检测器,并将它们应用于图片及实时视频流的检测. 人脸检测结果是最稳定和准确的.不幸的是,在许多情况下,眼睛检测和嘴巴检测结果是不可用的--对于面部特征/部分提取,强烈建议使用python,dlib,OpenCV提取眼睛,鼻子,嘴唇及下

  • 超详细注释之OpenCV实现视频实时人脸模糊和人脸马赛克

    目录 1. 效果图 2. 原理 2.1 什么是人脸模糊,如何将其用于人脸匿名化? 2.2 执行人脸模糊/匿名化的步骤 3. 源码 3.1 图像人脸模糊源码 3.2 实时视频流人脸模糊源码 参考 这篇博客将介绍人脸检测,然后使用Python,OpenCV模糊它们来"匿名化"每张图像,以确保隐私得到保护,保证没有人脸可以被识别如何使用. 并介绍俩种模糊的方法:简单高斯模糊.像素模糊. 人脸模糊和匿名化的实际应用包括: 公共/私人区域的隐私和身份保护 在线保护儿童(即在上传的照片中模糊未成年

  • 超详细注释之OpenCV构建透明的叠加层

    为了构造透明的叠加层,需要准备两个图像: (1)原始图片: (2)要 "叠加"在第一个图像上的图像(包含某种级别的Alpha透明度). 透明叠加层的用例几乎无穷无尽,其中俩个是: 可以将运行时的重要信息直接覆盖在输出图像上,而不是在单独的窗口或终端中显示.使用透明的叠加层可以减少混淆输出图像内容的需要! 使用Alpha透明度,将两个图像"融合"在一起. 使用cv2.addWeighted应用透明叠加层功能 cv2.addWeighted(overlay, alpha

  • 超详细注释之OpenCV dlib实现人脸采集

    上一篇博客中,我们了解了什么是面部标志,以及如何使用dlib,OpenCV和Python检测它们.利用dlib的HOG SVM的形状预测器获得面部ROI中面部区域的68个点(x,y)坐标. 这一篇博客中,将演示如何使用NumPy数组切片魔术来分别访问每个面部部分并提取眼睛,眉毛,鼻子,嘴巴和下巴的特征. 1. 效果图 先上一张检测完的图: 也可以每一部分先标识出来: 2. 原理 面部标志主要是: 口 右眉 左眉 右眼 左眼 鼻子 下颚线 这一节即提取这些部分: 从图中可以看到假设是以0为下标的数

  • Python画图小案例之多啦A梦叮当猫超详细注释

    一步步教你怎么用Python画多啦A梦叮当猫,进一步熟悉Python的基础画图操作. 分析:叮当猫由头.脸.眼.眼珠.鼻子.嘴.胡子.项带.铃当.身子.围嘴.手臂.手.脚组成. 其中:头.脸.眼.眼珠.鼻子.嘴.胡子组成一个部件:其余元件组成一个部件.废话不多说,上代码. 希望您给个关注给个赞,也算对我们的支持了. import math import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWi

随机推荐