最近在学习 图像 变化方面的知识,记录一些,废话少,直接上图和程序
目录
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 进行图片变化
图像变换实际是把 图片的坐标精选了重映射,重映射可以是矩阵相乘的方式即
*
=
即
=
*
如 变换矩阵是
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]
图像不变
如 变换矩阵是
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)