def draw_histogram(self, y): his = self.pimg.histogram() h2 = list(his) h2.sort() h2 = h2[-1] red = his[0:256] green = his[256:512] blue = his[512:768] self.rgbHistogram = Image.new('RGB', (256, 3 * y + 60), (255, 255, 255)) self.rgbHistogramDraw = ImageDraw2.Draw(self.rgbHistogram) PosY = y for i in range(len(red)): self.rgbHistogramDraw.line( ((i, PosY), (i, PosY - (red[i] * y) / h2)), ImageDraw2.Pen("red")) PosY += 70 for i in range(len(green)): self.rgbHistogramDraw.line( ((i, PosY), (i, PosY - (green[i] * y) / h2)), ImageDraw2.Pen("green")) PosY += 70 for i in range(len(blue)): self.rgbHistogramDraw.line( ((i, PosY), (i, PosY - (blue[i] * y) / h2)), ImageDraw2.Pen("blue")) self.rgbHistogram.save("Histogram.jpg") self.Histogram = ImageTk.PhotoImage(image=self.rgbHistogram) self.cvHistogram.create_image(0, 0, image=self.Histogram, anchor=NW) self.cvHistogram.configure(width=self.rgbHistogram.size[0], height=self.rgbHistogram.size[1])
def _draw_joints(self, image, node: Node): canvas = ImageDraw2.Draw(image) brush = ImageDraw2.Brush("red", 125) pos = node.position canvas.ellipse( (pos[0] - 3.5, pos[1] - 3.5, pos[0] + 3.5, pos[1] + 3.5), None, brush) canvas.flush() for child in node.children: self._draw_joints(image, child)
def test_sanity(): im = hopper("RGB").copy() draw = ImageDraw2.Draw(im) pen = ImageDraw2.Pen("blue", width=7) draw.line(list(range(10)), pen) draw, handler = ImageDraw.getdraw(im) pen = ImageDraw2.Pen("blue", width=7) draw.line(list(range(10)), pen)
def helper_line(points): # Arrange im = Image.new("RGB", (W, H)) draw = ImageDraw2.Draw(im) pen = ImageDraw2.Pen("yellow", width=2) # Act draw.line(points, pen) # Assert assert_image_equal_tofile(im, "Tests/images/imagedraw_line.png")
def draw_sign(self): face_coordinate = self.calculate_coordinate() image = Image.open(self.path) draw = ImageDraw2.Draw(image) pen = ImageDraw2.Pen('red', 1.0,) draw.rectangle(face_coordinate[0], pen) draw.rectangle(face_coordinate[1], pen) draw.rectangle(face_coordinate[2], pen) image.save('code.jpg', 'jpeg') self.img_label.setPixmap(QPixmap('code.jpg')) self.info_label.setText(self.information)
def test_textsize(): # Arrange im = Image.new("RGB", (W, H)) draw = ImageDraw2.Draw(im) font = ImageDraw2.Font("white", FONT_PATH) # Act size = draw.textsize("ImageDraw2", font) # Assert assert size[1] == 12
def helper_rectangle(bbox): # Arrange im = Image.new("RGB", (W, H)) draw = ImageDraw2.Draw(im) pen = ImageDraw2.Pen("green", width=2) brush = ImageDraw2.Brush("black") # Act draw.rectangle(bbox, pen, brush) # Assert assert_image_equal_tofile(im, "Tests/images/imagedraw_rectangle.png")
def test_ellipse_edge(self): # Arrange im = Image.new("RGB", (W, H)) draw = ImageDraw2.Draw(im) brush = ImageDraw2.Brush("white") # Act draw.ellipse(((0, 0), (W-1, H)), brush) # Assert self.assert_image_similar( im, Image.open("Tests/images/imagedraw_ellipse_edge.png"), 1)
def test_textsize_empty_string(): # Arrange im = Image.new("RGB", (W, H)) draw = ImageDraw2.Draw(im) font = ImageDraw2.Font("white", FONT_PATH) # Act # Should not cause 'SystemError: <built-in method getsize of # ImagingFont object at 0x...> returned NULL without setting an error' draw.textsize("", font) draw.textsize("\n", font) draw.textsize("test\n", font)
def test_text(): # Arrange im = Image.new("RGB", (W, H)) draw = ImageDraw2.Draw(im) font = ImageDraw2.Font("white", FONT_PATH) expected = "Tests/images/imagedraw2_text.png" # Act draw.text((5, 5), "ImageDraw2", font) # Assert assert_image_similar_tofile(im, expected, 13)
def draw_area_annotations(img, landmarks): draw = ImageDraw2.Draw(img) pen = ImageDraw2.Pen("blue", width=50) draw.polygon(landmarks, pen) extremes_points = get_extremes_points(landmarks) right_most = extremes_points[1] pt1, pt2 = convert_landmark_to_line_coordination(landmarks) draw = ImageDraw.Draw(img) draw.text((right_most[0] + 20, right_most[1]), text=f"{round(distance(pt1, pt2)/10, 2)}cm", fill="blue") return img
def test_ellipse_edge(): # Arrange im = Image.new("RGB", (W, H)) draw = ImageDraw2.Draw(im) brush = ImageDraw2.Brush("white") # Act draw.ellipse(((0, 0), (W - 1, H - 1)), brush) # Assert assert_image_similar_tofile(im, "Tests/images/imagedraw_ellipse_edge.png", 1)
def test_text(self): # Arrange im = Image.new("RGB", (W, H)) draw = ImageDraw2.Draw(im) font = ImageDraw2.Font("white", FONT_PATH) expected = "Tests/images/imagedraw2_text.png" # Act draw.text((5, 5), "ImageDraw2", font) # Assert self.assert_image_similar(im, Image.open(expected), 13)
def helper_polygon(points): # Arrange im = Image.new("RGB", (W, H)) draw = ImageDraw2.Draw(im) pen = ImageDraw2.Pen("blue", width=2) brush = ImageDraw2.Brush("red") # Act draw.polygon(points, pen, brush) # Assert assert_image_equal_tofile(im, "Tests/images/imagedraw_polygon.png")
def test_flush(): # Arrange im = Image.new("RGB", (W, H)) draw = ImageDraw2.Draw(im) font = ImageDraw2.Font("white", FONT_PATH) # Act draw.text((5, 5), "ImageDraw2", font) im2 = draw.flush() # Assert assert_image_equal(im, im2)
def helper_ellipse(mode, bbox): # Arrange im = Image.new("RGB", (W, H)) draw = ImageDraw2.Draw(im) pen = ImageDraw2.Pen("blue", width=2) brush = ImageDraw2.Brush("green") expected = f"Tests/images/imagedraw_ellipse_{mode}.png" # Act draw.ellipse(bbox, pen, brush) # Assert assert_image_similar_tofile(im, expected, 1)
def test_line_pen_as_brush(): # Arrange im = Image.new("RGB", (W, H)) draw = ImageDraw2.Draw(im) pen = None brush = ImageDraw2.Pen("yellow", width=2) # Act # Pass in the pen as the brush parameter draw.line(POINTS1, pen, brush) # Assert assert_image_equal_tofile(im, "Tests/images/imagedraw_line.png")
def helper_ellipse(self, mode, bbox): # Arrange im = Image.new("RGB", (W, H)) draw = ImageDraw2.Draw(im) pen = ImageDraw2.Pen("blue", width=2) brush = ImageDraw2.Brush("green") expected = "Tests/images/imagedraw_ellipse_{}.png".format(mode) # Act draw.ellipse(bbox, pen, brush) # Assert self.assert_image_similar(im, Image.open(expected), 1)
def drawText(self, off_x, off_y, text, w, h): font = ImageDraw2.Font("yellow", "Resources/monkey.otf", h) img = Image.new("RGB", (w, h), (0, 0, 0)) draw = ImageDraw2.Draw(img) draw.text((0, -3 * h / 10), text, font) # -12 #img_flip = img.transpose(Image.FLIP_TOP_BOTTOM) #img.show() self.text_pBits = img.tobytes("raw", "RGB") gl.glBindTexture(gl.GL_TEXTURE_2D, self.texture_1) gl.glTexSubImage2D(gl.GL_TEXTURE_2D, 0, off_x, off_y, w, h, gl.GL_RGB, gl.GL_UNSIGNED_BYTE, self.text_pBits) gl.glBindTexture(gl.GL_TEXTURE_2D, 0)
def test_big_rectangle(): # Test drawing a rectangle bigger than the image # Arrange im = Image.new("RGB", (W, H)) bbox = [(-1, -1), (W + 1, H + 1)] brush = ImageDraw2.Brush("orange") draw = ImageDraw2.Draw(im) expected = "Tests/images/imagedraw_big_rectangle.png" # Act draw.rectangle(bbox, brush) # Assert assert_image_similar_tofile(im, expected, 1)
def detectTextOnImage(imagePath, imageName, data): """ draw line to the image based on the x and y coordinates from JSON """ im = Image.open(imagePath + imageName) d = ImageDraw2.Draw(im) pen = ImageDraw2.Pen(color="red") for j in data: x = j["x_coordinates"].replace("[", "").replace("]", "").split(",") y = j["y_coordinates"].replace("[", "").replace("]", "").split(",") #LB, LT, RT, RB = (c[0]["x"], c[0]["y"]), (c[1]["x"], c[1]["y"]), (c[2]["x"], c[2]["y"]), (c[3]["x"], c[3]["y"]) LB, LT, RT, RB = (int(y[0]), int(x[0])), (int(y[1]), int(x[1])), (int( y[2]), int(x[2])), (int(y[3]), int(x[3])) d.line([LB, LT, RT, RB, LB], pen) #red line im.save(imagePath + "ocred_" + imageName) print("image saved")
def draw(self, image): self._calculate_points() canvas = ImageDraw2.Draw(image) pen = ImageDraw2.Pen("blue", width=7, opacity=125) pen2 = ImageDraw2.Pen("red", width=7, opacity=125) brush = ImageDraw2.Brush("blue", 125) pos_1 = self.position[Part.POSITION] pos_2 = self.position[Part.TORSO] canvas.line(pos_1 + pos_2, pen) pos_1 = self.position[Part.POSITION] pos_2 = self.position[Part.UPPER_LEG_1] canvas.line(pos_1 + pos_2, pen2) pos_1 = self.position[Part.UPPER_LEG_1] pos_2 = self.position[Part.LOWER_LEG_1] canvas.line(pos_1 + pos_2, pen2) pos_1 = self.position[Part.POSITION] pos_2 = self.position[Part.UPPER_LEG_2] canvas.line(pos_1 + pos_2, pen) pos_1 = self.position[Part.UPPER_LEG_2] pos_2 = self.position[Part.LOWER_LEG_2] canvas.line(pos_1 + pos_2, pen) pos_1 = self.position[Part.TORSO] pos_2 = self.position[Part.UPPER_ARM_1] canvas.line(pos_1 + pos_2, pen2) pos_1 = self.position[Part.UPPER_ARM_1] pos_2 = self.position[Part.LOWER_ARM_1] canvas.line(pos_1 + pos_2, pen2) pos_1 = self.position[Part.TORSO] pos_2 = self.position[Part.UPPER_ARM_2] canvas.line(pos_1 + pos_2, pen) pos_1 = self.position[Part.UPPER_ARM_2] pos_2 = self.position[Part.LOWER_ARM_2] canvas.line(pos_1 + pos_2, pen) for part in Part: pos = self.position[part] if part == Part.HEAD: r = self.radius_head brush = ImageDraw2.Brush("blue", 125) canvas.ellipse((pos[0] - r, pos[1] - r, pos[0] + r, pos[1] + r), pen, brush) else: brush = ImageDraw2.Brush("red", 125) canvas.ellipse((pos[0] - 3.5, pos[1] - 3.5, pos[0] + 3.5, pos[1] + 3.5), None, brush) canvas.flush()
def _draw_sticks(self, image, node: Node, shadow=False): canvas = ImageDraw2.Draw(image) if shadow: color = "grey" else: color = "blue" if node.attributes is None else node.attributes.color pen = ImageDraw2.Pen(color, width=7, opacity=125) brush = ImageDraw2.Brush(color, 125) if node.attributes is None or not node.attributes.circle: canvas.line(node.parent.position + node.position, pen) else: pos = ((node.position[0] + node.parent.position[0]) / 2, (node.position[1] + node.parent.position[1]) / 2) r = math.sqrt((node.position[0] - node.parent.position[0])**2 + (node.position[1] - node.parent.position[1])**2) / 2 canvas.ellipse((pos[0] - r, pos[1] - r, pos[0] + r, pos[1] + r), pen, brush) canvas.flush() for child in node.children: self._draw_sticks(image, child, shadow)
img_folder = '../clear_merged_test' save_dir = img_folder+'_vis' if not os.path.exists(save_dir): os.mkdir(save_dir) flag=1 for line in open('./submit.csv'): if flag: flag=0 continue id,x1,y1,x2,y2,x3,y3,havestar=line.strip().split(',') x1,y1,x2,y2,x3,y3 = int(x1),int(y1),int(x2),int(y2),int(x3),int(y3) # print(id,x1,y1,x2,y2,x3,y3,havestar) # 7f0cf4a6262372bb93077e1611ddfd0b 149 124 134 84 150 195 0 img = os.path.join(img_folder,id+'.jpg') img = Image.open(img) draw = ImageDraw2.Draw(img) pen = ImageDraw2.Pen('white') font = ImageDraw2.Font(color='white',file='./micross.ttf') x1_min=x1-10 x1_max=x1+10 y1_min=y1-10 y1_max=y1+10 x2_min=x2-10 x2_max=x2+10 y2_min=y2-10 y2_max=y2+10 x3_min=x3-10 x3_max=x3+10 y3_min=y3-10 y3_max=y3+10 draw.line([(x1_min,y1_min),(x1_max,y1_min),(x1_max,y1_max),(x1_min,y1_max),(x1_min,y1_min)],pen)
def rcirc(self, image, x, y, r, color="red"): Drawner = ImageDraw2.Draw(image) Drawner.ellipse(((x - 1 - r, y - 1 - r), (x + r + 1, y + r + 1)), ImageDraw2.Pen("red")) Drawner.ellipse(((x - r, y - r), (x + r, y + r)), ImageDraw2.Pen("red"))