opencv - 如何通过变换矩阵在python中执行图像变换操作(旋转、缩放、平移)

标签 opencv image-processing matrix computer-vision python-imaging-library

我想在不调用任何其他外部库(PIL、CV2)函数的情况下对图像执行旋转、缩放、平移等矩阵变换操作。

我正在尝试使用基本的矩阵变换方法。但是我遇到了一些问题,比如旋转时有孔,图像被裁剪。

我想沿着中心执行上述所有操作。在这里需要一些指导。

旋转逻辑:

newImage = np.zeros((2*row, 2*column, 3), dtype=np.uint8)
radAngle = math.radians(int(input("angle: ")))
c, s = math.cos(radAngle), math.sin(radAngle)
mid_coords = np.floor(0.5*np.array(image.shape))
for i in range(0, row-1):
    for j in range(0, column-1):
        x2 = mid_coords[0] + (i-mid_coords[0])*c - (j-mid_coords[1])*s
        y2 = mid_coords[1] + (i-mid_coords[0])*s + (j-mid_coords[1])*c 
        newImage[int(math.ceil(x2)), int(math.ceil(y2))] = image[i, j]

最佳答案

旋转图像中出现孔洞的原因是您将原始图像的每个像素分配给旋转图像中的计算像素位置。因此,旋转图像中的一些像素被遗漏了。 你应该反其道而行之。 对于旋转图像中的每个像素,从原始图像中找到它的值。 请引用this回答。

关于opencv - 如何通过变换矩阵在python中执行图像变换操作(旋转、缩放、平移),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58045724/

相关文章:

c++ - 有没有办法将四元数转换为角度?

javascript - 在 Javascript 中乘以 2 个矩阵

matlab - 多个矩阵乘以多个向量的快速乘法

python - 如何根据纹理分割此图像?

opencv - 在OpenCV中经过设置的时间后,如何自动关闭摄像机流?

c# - 在 Web 应用程序中使用网络摄像头并拍摄高分辨率 (2 Mpix) 图片

java - 使用动态负载调度的并行图像卷积滤波器: artifacts

opencv - 使用opencv检测棕色物体

java - OpenCV 寻找轮廓的角点

c - 非常大的图像中的内存高效行拼接