# read image as RGB and add alpha (transparency)
im = Image.open("frontal_1.jpg").convert("RGBA")
# convert to numpy (for convenience)
imArray = numpy.asarray(im)
# create mask
polygon = [(444, 203), (623, 243), (691, 177), (581, 26), (482, 42)]
maskIm = Image.new('L', (imArray.shape[1], imArray.shape[0]), 0)
ImageDraw.Draw(maskIm).polygon(polygon, outline=1, fill=1)
mask = numpy.array(maskIm)
...
newIm = Image.fromarray(newImArray, "RGBA")
newIm.save("out.png")
为什么在函数退出时指针仍然是20?
我在void func(char *p)
{
int q = 13;
p = &q;
printf("%d\n", *p);
}
void main(void)
{
int var = 20;
int *p = &var;
printf("%d\n", *p);
func(p);
printf("%d\n", *p);
}
结束时跳了一下,在其中修改了指针,在最后一个func()
中,printf()
的值将指向堆栈中的一些随机内容。
答案 0 :(得分:6)
这是你的
void func(char *p)
{
int q = 13;
p = &q;
}
这意味着“使p指向q”并更改p
的值,该值只是函数内部的一个变量。函数外部没有任何变量值更改。
如果你要写这个
void func(char *p)
{
int q = 13;
*p = q;
}
这意味着“将p
指向的变量更改为13”,这将在外部看到,这意味着main中的变量var
会更改其值(取决于字节序)它将是什么,因为它是int而不是指针声称的char)。
如果要在main中更改指针的值,则需要一个双指针:
void func(char **p)
{
int q = 13;
*p = &q;
printf("%d\n", *p);
}
这意味着“使指向p
的指针指向局部变量q
”,在这种情况下,您将像在main
中所期望的那样悬挂一个指针。
答案 1 :(得分:3)
否,p
本身就是值。在p
内部对func()
所做的任何更改都不会反映回main()
。
出于完整性考虑,对p
所指向的值(即*p
)所做的任何更改都会反映在main()
中。