0
点赞
收藏
分享

微信扫一扫

利用格式化字符串漏洞实现任意地址读写

想溜了的蜗牛 2023-06-02 阅读 68

1. img[:, :, ::-1]

img[:, :, ::-1] 是一种常见的图像操作方式,用于对图像进行水平翻转(即左右翻转)、上下翻转、颜色通道转换(BRR–>RGB)。

在Python中,多维数组可以使用切片语法进行索引和切片。对于三维数组或图像,第一个维度表示行,第二个维度表示列,第三个维度通常表示颜色通道(例如RGB图像中的红、绿、蓝三个通道)。

因此,img[:, :, ::-1] 表示选择所有行、所有列,并将最后一个维度倒序排列。由于在OpenCV中,最后一个维度按顺序分别代表B、G、R三个颜色通道,因此将其倒序排列相当于将R通道放在了最前面,即将BGR图像转换为RGB图像。

2. ::-1如何更通俗的理解呢

::-1这个语法可以理解为Python中的切片(slice)语法,用于对序列(例如列表、字符串、多维数组等)进行翻转或截取操作。

具体来说,如果一个切片的形式是start:stop:step,其中start表示起始位置(包括该位置),stop表示终止位置(不包括该位置),step表示步长。如果省略start,默认为0;如果省略stop,默认为序列长度;如果省略step,默认为1。

step负数时,表示从右向左遍历序列,即反向遍历。而“::”表示在两个冒号之间,没有指定start和stop,因此表示选择所有元素。最后的“-1”表示逆序遍历,即从序列末尾开始倒序遍历。

因此,[::-1]可以理解为对整个序列进行倒序遍历,返回一个新的序列,这个语法常用于反转列表、字符串以及多维数组的行、列等方向。

对于图像处理,img[:, :, ::-1]表示对多维数组的第三个维度(即通道维度)进行逆序遍历,将BGR顺序变成RGB顺序,从而实现图像色彩通道的转换。

3. 示例

import cv2

img = cv2.imread(r'002344348659-90_84-429&369_530&406-525&405_425&398_428&364_528&371-0_0_17_26_30_24_8-105-11.png')

cv2.imshow('img', img)

# b g r --> r g b
RGB = img[:, :, ::-1]

# 左右颠倒
l_r = img[:, ::-1, :]

# 上下颠倒
u_d = img[::-1, :, :]

cv2.imshow('RGB', RGB)
cv2.imshow('l_r', l_r)
cv2.imshow('u_d', u_d)
cv2.waitKey(0)

示例效果:
在这里插入图片描述

举报

相关推荐

0 条评论