图像变换 基础之 拉伸 &旋转

最近在学习 图像 变化方面的知识,记录一些,废话少,直接上图和程序

目录

1  np 数据图片

 1.1我们先画一个格子​编辑可参考可参考如下程序

1.2 进行图片变化 图像变换实际是把 图片的坐标精选了重映射,重映射可以是矩阵相乘的方式即


1  np 数据图片

 1.1我们先画一个格子

可参考可参考如下程序


for i in range(0, img_shape[0]):
    for j in range(0, img_shape[1]):
        if (j % 20 == 0 or i % 20 == 0) and (j % 20 != i % 20):
            img[i][j] = [255, 0, 2]
            pass


1.2 进行图片变化
 图像变换实际是把 图片的坐标精选了重映射,重映射可以是矩阵相乘的方式即

\begin{bmatrix} x_{0}\\ y_{0}\end{bmatrix} *\begin{bmatrix} a,b & \\ c,d& \end{bmatrix}=\begin{bmatrix} x\\ y_{} \end{bmatrix}

 \begin{bmatrix} x\\ y_{} \end{bmatrix}=\begin{bmatrix} x_{0}\\ y_{0}\end{bmatrix}*\begin{bmatrix} a,b & \\ c,d& \end{bmatrix}

如 变换矩阵是\begin{bmatrix} 1 ,0 & \\ 0,1& \end{bmatrix}

transform = [[1, 0], [0, 1]]
for i in range(0, img_shape[0]):
    for j in range(0, img_shape[1]):
        # if (j % 20 == 0 or i % 20 == 0) and (j % 20 != i % 20):
        [x, y] = np.dot(transform, [i, j])
        # print("x:" + str(x) + " y:" + str(y), end=" ")
        # print(img[i][j])
        # if all(img[i][j] == blue):
        img2[x][y] = img[i][j]

图像不变

如 变换矩阵是\begin{bmatrix} 1,0& \\ 0,2& \end{bmatrix}

y不变,x 坐变到原来2倍数的位置(x和y是反的) 

若是  x变成 (x+y),y没有变。

 哈哈哈,有没有感觉很神奇 ,来看一下其他变换

        x = int(math.sqrt(i)*40)
        y = int(math.sqrt(j)*40)

附上全部代码,供参考

import numpy as np
import cv2
import math
import matplotlib.pyplot as plt
width = 401
height = 401
blue = [1, 0, 0]
img = np.zeros((width, height, 3), np.uint8)
# img = cv2.imread("./person.jpg")
img_shape = np.shape(img)
print(img_shape)
print(img[0][0])
for i in range(0, img_shape[0]):
    for j in range(0, img_shape[1]):
        if (j % 20 == 0 or i % 20 == 0) and (j % 20 != i % 20):
            img[i][j] = [255, int(i/2), 255-int(j/2)]
            pass
# img = cv2.pyrUp(img)
cv2.imshow("img1", img)
cv2.waitKey(1000)
print("-----------test for transform--------------------")
img2 = np.zeros((width*2, height*2, 3), np.uint8)
# print(img2[0][0])
print(np.shape(img2))

transform = [[1, 0], [1, 1]]
for i in range(0, img_shape[0]):
    for j in range(0, img_shape[1]):
        # if (j % 20 == 0 or i % 20 == 0) and (j % 20 != i % 20):
        [x, y] = np.dot(transform, [i, j])
        # x = int(math.sqrt(i)*40)
        # y = int(math.sqrt(j)*40)
        # if x > 600:
        #     x = 600
        # print("x:" + str(x) + " y:" + str(y), end=" ")
        # print(img[i][j])
        # if all(img[i][j] == blue):
        img2[x][y] = img[i][j]

sh2 = np.shape(img2)
cv2.imshow("transform_", img2)
# for i in range(1, sh2[0]-1):
#     for j in range(1, sh2[1]-1):
#         if all(img2[i][j] == [255, 255, 255]):
#             img2[i][j] = img2[i][j+1]
#
# cv2.imshow("transform_pad", img2)
cv2.waitKey(0)




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值