Passing values from c# window form to python script.

asked 2014-07-06 21:49:24 -0500

JS gravatar image

Hi, i am trying to pass values from c# window to python script but i have no clue how. Anyone able to shed some light for this?

  • I am trying to pass int values from textbox into the python script.

// Python script code.

   import sys, math, Image

def Distance(p1,p2):
  dx = p2[0] - p1[0]
  dy = p2[1] - p1[1]
  return math.sqrt(dx*dx+dy*dy)

def ScaleRotateTranslate(image, angle, center = None, new_center = None, scale = None, resample=Image.BICUBIC):
  if (scale is None) and (center is None):
    return image.rotate(angle=angle, resample=resample)
  nx,ny = x,y = center
  sx=sy=1.0
  if new_center:
    (nx,ny) = new_center
  if scale:
    (sx,sy) = (scale, scale)
  cosine = math.cos(angle)
  sine = math.sin(angle)
  a = cosine/sx
  b = sine/sx
  c = x-nx*a-ny*b
  d = -sine/sy
  e = cosine/sy
  f = y-nx*d-ny*e
  return image.transform(image.size, Image.AFFINE, (a,b,c,d,e,f), resample=resample)

def CropFace(image, eye_left=(0,0), eye_right=(0,0), offset_pct=(0.2,0.2), dest_sz = (70,70)):
  # calculate offsets in original image
  offset_h = math.floor(float(offset_pct[0])*dest_sz[0])
  offset_v = math.floor(float(offset_pct[1])*dest_sz[1])
  # get the direction
  eye_direction = (eye_right[0] - eye_left[0], eye_right[1] - eye_left[1])
  # calc rotation angle in radians
  rotation = -math.atan2(float(eye_direction[1]),float(eye_direction[0]))
  # distance between them
  dist = Distance(eye_left, eye_right)
  # calculate the reference eye-width
  reference = dest_sz[0] - 2.0*offset_h
  # scale factor
  scale = float(dist)/float(reference)
  # rotate original around the left eye
  image = ScaleRotateTranslate(image, center=eye_left, angle=rotation)
  # crop the rotated image
  crop_xy = (eye_left[0] - scale*offset_h, eye_left[1] - scale*offset_v)
  crop_size = (dest_sz[0]*scale, dest_sz[1]*scale)
  image = image.crop((int(crop_xy[0]), int(crop_xy[1]), int(crop_xy[0]+crop_size[0]), int(crop_xy[1]+crop_size[1])))
  # resize it
  image = image.resize(dest_sz, Image.ANTIALIAS)
  return image

if __name__ == "__main__":
    image =  Image.open("C:\\Users\\L31101\\Desktop\\test.jpg")
    CropFace(image, eye_left=(34,51), eye_right=(50,52), offset_pct=(0.3,0.3), dest_sz=(92,112)).save("C:\\Users\\L31101\\Desktop\\testcrop.jpg")
  • I am trying to replace the eye_left(34,51) and eye_right(50,52) into new values from my c# window form so that cropping of image can be flexible with different images.
edit retag flag offensive close merge delete

Comments

that sounds rather complicated.

why not add a mousehandler(in your python script), click each eye, and get the positions this way ?

berak gravatar imageberak ( 2014-07-07 02:55:25 -0500 )edit

Do I place the mouse handler codes in the same python script? So it should pop out a window for me to choose the coordinates so that they will be initiated to the left and right eye coordinates? Thanks!

JS gravatar imageJS ( 2014-07-07 03:25:48 -0500 )edit