小编Erl*_*aff的帖子

Python/PIL仿射变换

这是PIL中的一个基本转换问题.在过去的几年里,我已经尝试了至少几次来正确实现这一点,而且似乎在PIL中我没有完全了解Image.transform.我想实现相似变换(或仿射变换),我可以清楚地说明图像的极限.为了确保我的方法有效,我在Matlab中实现了它.

Matlab实现如下:

im = imread('test.jpg');
y = size(im,1);
x = size(im,2);
angle = 45*3.14/180.0;
xextremes = [rot_x(angle,0,0),rot_x(angle,0,y-1),rot_x(angle,x-1,0),rot_x(angle,x-1,y-1)];
yextremes = [rot_y(angle,0,0),rot_y(angle,0,y-1),rot_y(angle,x-1,0),rot_y(angle,x-1,y-1)];
m = [cos(angle) sin(angle) -min(xextremes); -sin(angle) cos(angle) -min(yextremes); 0 0 1];
tform = maketform('affine',m')
round( [max(xextremes)-min(xextremes), max(yextremes)-min(yextremes)])
im = imtransform(im,tform,'bilinear','Size',round([max(xextremes)-min(xextremes), max(yextremes)-min(yextremes)]));
imwrite(im,'output.jpg');

function y = rot_x(angle,ptx,pty),
    y = cos(angle)*ptx + sin(angle)*pty

function y = rot_y(angle,ptx,pty),
    y = -sin(angle)*ptx + cos(angle)*pty
Run Code Online (Sandbox Code Playgroud)

这按预期工作.这是输入:

在此输入图像描述

这是输出:

在此输入图像描述

这是实现相同转换的Python/PIL代码:

import Image
import math

def rot_x(angle,ptx,pty):
    return math.cos(angle)*ptx + math.sin(angle)*pty

def rot_y(angle,ptx,pty):
    return -math.sin(angle)*ptx + math.cos(angle)*pty

angle …
Run Code Online (Sandbox Code Playgroud)

python matlab transformation python-imaging-library pillow

13
推荐指数
2
解决办法
9596
查看次数

为什么我们不能在没有基类指针或引用的情况下在C++中实现多态?



首先看一下下面的代码(在这个代码形状中是基类,而行是派生类)

void drawshapes(shape sarray[],int size)
{
    for(int i=0;i< size; i++)
        sarray[i].draw();
}

main()
{
   line larray[10];
   larray[0]=line(p1,p2);//assuming that we have a point class
   larray[1]=line(p2,p3);
   ..........
   drawshapes(larray,10);
}
Run Code Online (Sandbox Code Playgroud)


当我们编译这个程序时,首先会调用shape的draw方法,然后程序终止.为什么它会终止?为什么我们不能在没有基类指针或引用的情况下实现多态性这是什么技术原因?如果我们试图用对象数组实现多态,那么编译器会做什么?请用例子以可理解的方式解释.我会非常感激的.

c++ oop compiler-theory

0
推荐指数
2
解决办法
1903
查看次数