How to sort x, y in format/name "output_x:465_y:159.png" in the list

Question:

my purpose is to cut the original img in sticker size, and recognize img to text, find if is duplicate or print wrong

for now I can save img’s name as their (x,y) in original pic, such as "output_x:465_y:159.png"

  • I can sort sort (x,y) in list
xy_list = []
tem_list_x_and_y = [ ] 

if (x != 0) and (y != 0):
    # I saved sticker/croped image by their (x,y) on original big image
    cv2.imwrite(f"/home/student_joy/desktop/test_11_8/output01_test11_9/output_x:{x}_y:{y}.png", roi)
    tem_list_x_and_y.append(x)
    tem_list_x_and_y.append(y)
    
    xy_list.append(tem_list_x_and_y)

# save all sticker/croped image's (x,y) , and sort y first , then sort x
print("len is : " ,len(xy_list))
print(sorted(xy_list , key=lambda k: [k[1], k[0]]))
  • that the output is

[[45, 47], [150, 47], [255, 47], [360, 47], [465, 47], [570, 47], [45,
159], [150, 159], [255, 159], [360, 159], [465, 159], [570, 159], [45,
273], [150, 273], [255, 273], [360, 273], [465, 273], [570, 273], [45,
389], [150, 389], [255, 389], [360, 389], [465, 389], [570, 389], [45,
504], [150, 504], [255, 504], [360, 504], [465, 504], [570, 504]]


Question:

  • How can I sort following list by (x,y) value like last one? format: "output_x:{x}_y:{y}.png"

[‘output_y:47_x:150.png.png’, ‘output_y:389_x:360.png.png’,
‘output_y:159_x:465.png.png’, ‘output_y:504_x:45.png.png’,
‘output_y:389_x:570.png.png’, ‘output_y:504_x:570.png.png’,
‘output_y:273_x:255.png.png’, ‘output_y:504_x:150.png.png’,
‘output_y:389_x:45.png.png’, ‘output_y:504_x:360.png.png’,
‘output_y:159_x:150.png.png’, ‘output_y:273_x:150.png.png’,
‘output_y:504_x:255.png.png’, ‘output_y:273_x:465.png.png’,
‘output_y:159_x:255.png.png’, ‘output_y:389_x:255.png.png’,
‘output_y:273_x:45.png.png’, ‘output_y:504_x:465.png.png’,
‘output_y:389_x:465.png.png’, ‘output_y:47_x:465.png.png’,
‘output_y:273_x:360.png.png’, ‘output_y:47_x:45.png.png’,
‘output_y:47_x:255.png.png’, ‘output_y:159_x:360.png.png’,
‘output_y:273_x:570.png.png’, ‘output_y:47_x:570.png.png’,
‘output_y:159_x:570.png.png’, ‘output_y:47_x:360.png.png’,
‘output_y:159_x:45.png.png’]


  • tried code:
list =['output_y:47_x:150.png.png', 'output_y:389_x:360.png.png', 'output_y:159_x:465.png.png', 'output_y:504_x:45.png.png', 'output_y:389_x:570.png.png', 'output_y:504_x:570.png.png', 'output_y:273_x:255.png.png', 'output_y:504_x:150.png.png', 'output_y:389_x:45.png.png', 'output_y:504_x:360.png.png', 'output_y:159_x:150.png.png', 'output_y:273_x:150.png.png', 'output_y:504_x:255.png.png', 'output_y:273_x:465.png.png', 'output_y:159_x:255.png.png', 'output_y:389_x:255.png.png', 'output_y:273_x:45.png.png', 'output_y:504_x:465.png.png', 'output_y:389_x:465.png.png', 'output_y:47_x:465.png.png', 'output_y:273_x:360.png.png', 'output_y:47_x:45.png.png', 'output_y:47_x:255.png.png', 'output_y:159_x:360.png.png', 'output_y:273_x:570.png.png', 'output_y:47_x:570.png.png', 'output_y:159_x:570.png.png', 'output_y:47_x:360.png.png', 'output_y:159_x:45.png.png']

arr = []

for i in list:
    arr.append('output_y:' + str(i[1]) + '_x:' + str(i[0]) + '.png')
    
print(arr)
  • output:

[‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’, ‘output_y:u_x:o.png’]

Asked By: joy.socl

||

Answers:

list = [[45, 47], [150, 47], [255, 47], [360, 47], [465, 47], [570, 47], [45, 159], [150, 159], [255, 159], [360, 159], [465, 159], [570, 159], [45, 273], [150, 273], [255, 273], [360, 273], [465, 273], [570, 273], [45, 389], [150, 389], [255, 389], [360, 389], [465, 389], [570, 389], [45, 504], [150, 504], [255, 504], [360, 504], [465, 504], [570, 504]]
arr = []
    
    for i in list:
        arr.append('output_y:' + str(i[1]) + '_x:' + str(i[0]) + '.png')
        
    print(arr)

result (order differs – that’s what you mean?):

[‘output_y:47_x:45.png’, ‘output_y:47_x:150.png’, ‘output_y:47_x:255.png’, ‘output_y:47_x:360.png’, ‘output_y:47_x:465.png’, ‘output_y:47_x:570.png’, ‘output_y:159_x:45.png’, ‘output_y:159_x:150.png’, ‘output_y:159_x:255.png’, ‘output_y:159_x:360.png’, ‘output_y:159_x:465.png’, ‘output_y:159_x:570.png’, ‘output_y:273_x:45.png’, ‘output_y:273_x:150.png’, ‘output_y:273_x:255.png’, ‘output_y:273_x:360.png’, ‘output_y:273_x:465.png’, ‘output_y:273_x:570.png’, ‘output_y:389_x:45.png’, ‘output_y:389_x:150.png’, ‘output_y:389_x:255.png’, ‘output_y:389_x:360.png’, ‘output_y:389_x:465.png’, ‘output_y:389_x:570.png’, ‘output_y:504_x:45.png’, ‘output_y:504_x:150.png’, ‘output_y:504_x:255.png’, ‘output_y:504_x:360.png’, ‘output_y:504_x:465.png’, ‘output_y:504_x:570.png’]

Answered By: Piotr Żak