Rozřezání SCANU na více obrázků (detekce hran) ?

Nástroje pro uměleckou i technickou grafiku, DTP, CAD

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod daftkrys 21. 9. 2019 00:23

Ahoj, čistě laický dotaz. :) Sbírám hokejové kartičky a vzhledem k rozrůstající sbírce jsem se rozhodl, že všechny karty nascanuji a převedu do digitální galerie. A zde nastává problém. Prvních cca 3000 jsem postupně po 9 kusech / stránka nascanoval a poté postupně po jedné ořezával na potřebnou velikost a rovnal do roviny. Věřte nebo ne, těch 3000 karet mi trvalo cca 3 měsíce. Jsem precizní a vše jsem chtěl mít na pixel stejně veliké a "krásné" :) nyní se chystám na druhou fázi (cca 10000) a rád bych se poradil o možnosti, automatického rovnání a automatického ořezu. Prostě a jednoduše aby se mi těch 9 karet na jedné stránce automaticky srovnalo a ořezalo - a pak nejlépe uložilo :)

Doslechl jsem se, že ve photoshopu je podobná možnost Obrázek → Rozdělit skenované fotografie ale při mém pokusu se to nikdy nepovedlo. Karty jsou nascanovanéna stránce celkem blízko u sebe a programu to dělalo problém.

Dokázal by mi někde z vás poradit, jak se s tímhle problémem poprat? A prosím vysvětlit jako malému dítěti... :)
Hezký večer všem...

Honza.
Přílohy
01lll.jpg
vzorek...
daftkrys
Kolemjdoucí

Odeslat příspěvekod meda2016 21. 9. 2019 07:28

meda2016
Junior

Odeslat příspěvekod daftkrys 23. 9. 2019 17:50

Díky za info, tenhle článek znám, ale i tak doufám, že nějaké jiné řešení existuje. Scanovat totiž 2500 stránek nebo cca 1000 je velký rozdíl...i tak děkuji. H.
daftkrys
Kolemjdoucí

Odeslat příspěvekod JirkaVejrazka 23. 9. 2019 18:14

Ja jsem neco podobneho psal asi pred rokem. Bylo to jen orezani okraju z jednoho obrazku, ale treba by se to dalo adaptovat pro tvoje potreby.

Prikladam kod, ktery jsem pouzil. Bohuzel ted v pristich dnech nebudu mit cas ho nejak upravovat pro tvoje potreby. Ale mozna ti k necemu bude
Kód: Vybrat vše
import cv2

def crop_image(img_name, new_name):
    '''given img_name, reads the image and attempts to find crop it so it
    only contains text, no screen borders etc.
    '''
    # this was done by a ton of googling etc. Works for me, but YMMV
    img = cv2.imread(img_name)

    # change to grayscale
    imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    # make white stay white, all else go black
    ret, thresh = cv2.threshold(imgray, 250, 255, cv2.THRESH_TOZERO)
    #cv2.imwrite('thresh.png', thresh)

    # find contours, return only the most external ones (those close to image edges)
    im2, contours, hierarchy = cv2.findContours(thresh,
                                                cv2.RETR_EXTERNAL,
                                                cv2.CHAIN_APPROX_SIMPLE)
    #cv2.imwrite('contours.png', im2)

    # this is the largest detected contour in the image
    max_contour = max(contours, key=cv2.contourArea)

    # find the rectangle for the contour
    x, y, w, h = cv2.boundingRect(max_contour)
    #print(x, y, w, h)

    # crop
    cropped_img = img[y:y+h, x:x+w]
    cv2.imwrite(new_name, cropped_img)

    # for debugging only - enable if you want to see the detected crop mask
    # mask = np.zeros(img.shape, np.uint8)
    # cv2.drawContours(mask, [max_contour], -1, 255, -1)
    # cv2.imwrite('mask.png', mask)
JirkaVejrazka
Mírně pokročilý

Odeslat příspěvekod Emil Pastelka 24. 9. 2019 00:01

Pokud jsou všechny karty stejně veliké, udělal bych si přípravek z kartonu, nebo plastu (lega) pro stejné vyskládání na plochu skeneru. Podobně se skenují průhledné předlohy. Karty pak budou mít vždy stejné umístění a hlavně budou všechny rovně již v základu. Dočasně to lze pojistit třeba tavným lepidlem přímo ke sklu skeneru - dolů to jde bez škod.
Na identické skeny pak lze v PS aplikovat jednoduchou akci a nemusíte řešit detekci hran, či rotaci a podobně.
Osobně bych u tak malé předlohy zkusil i fotografii - stativ, světlo, jeden pravý úhel pro umístění fotky a automatickou spoušť...
Emil Pastelka
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků