[ vojvoda1010 @ 09.10.2022. 08:13 ] @
Da li postoji nacin da se izvrsi vise bulk crop image i to do ivica slika, kao sto je to slucaj u android app npr. office lens?

znaci ima sliku koja nije slikana pravougaono nego nepravilno, i da se slika isece do ivica.




u linku je slika kao primer


https://stackoverflow.com/ques...sing-edge-detection-in-android
[ calexx @ 09.10.2022. 14:45 ] @
To valjda ima svaki prosečan program za obradu slika. Ne znam za viewere, možda i neki od njih ima.
[ vojvoda1010 @ 09.10.2022. 15:55 ] @
problem je u tome sto nema.

samo ima u telefonu. pokusavam da nadjem proghram ali nema
[ calexx @ 09.10.2022. 16:25 ] @
Koji program si probao? Svakako će da bude izobličenja u rezultatu ali ti to verovatno nije bitno.
[ gilopile @ 09.10.2022. 16:53 ] @
Besplatni fastStone ima tu opciju `crop`, a i bezbroj korisnih opcija.
https://www.faststone.org/FSViewerDetail.htm

Koristim jedino njega od pamtiveka.



[ Panta_ @ 09.10.2022. 18:49 ] @
Probaj sa Gimp-om, jednostavno je.
[ shadow452 @ 10.10.2022. 05:42 ] @
Probaj sa ACDsee.
[ mivedra @ 10.10.2022. 13:57 ] @
Ima i windows 10 program za pregled slika ugrađen u o.s.Može da se radi opsecanje po želji.
[ gilopile @ 10.10.2022. 14:13 ] @
Ja tek sad shvatio sta njemu treba.
Obicno opcija crop moze samo pravougano da sece.
Ovde treba nepravilan oblik kropovati.
Neki smart krop treba da sam oznaci ivice...

Tu vec treba neki napredniji program. Ne znam.

Aha, evo Panta je uspeo sa gimp-om. To bi trebalo da je to.
[ calexx @ 10.10.2022. 17:45 ] @
Ja sam i napisao da to može svaki prosečan program za obradu slika ali vieweri možda. Ipak nije standardna operacija. Svakako da može Gimp, smeo bih na neviđeno da se kladim da može i PhotoShop ali i još mnogi drugi. Ako koristi linux onda je Gimp prvi pri ruci, mada on postoji i u windows verziji. Pitanje je samo na šta je navikao i da li je uopšte probao da ovo uradi.
[ TheSpiridon @ 10.10.2022. 17:49 ] @
Ne, ja koliko sam ga razumeo on hoće da snimi trapeznu-nepravilnu sliku A svakako svaki editor slika ima opciju da tranformiše crop u pravoguaonik. Photoshop ima.
[ Miroslav Cvejić @ 10.10.2022. 19:51 ] @
I povrh svega bulk, dakle da učita gomilu takvih slika i da ih program sam ispravi i iseče automatski.
[ bakara @ 11.10.2022. 06:52 ] @
Nema tako nesto ni na androidu da radi "automatski nepravilno kropovanje i ispravljanje grupe slika" (on to hoce),
a narocito nema besplatno.

Verovatno mu treba za "skeniranje" dokumenata kamerom.

fast stone ima automatizovano bulk kropovanje, ali u predefinisanoj dimenziji, i drugi programi za win rade na taj nacin.
a takav prgram bi morao da radi i prepozavanje slike, kropovanje i na kraju korekciju.
[ vojvoda1010 @ 11.10.2022. 20:47 ] @
Nema tako nesto ni na androidu da radi "automatski nepravilno kropovanje i ispravljanje grupe slika"

To mi treba.

U androidu to radi office lens, scan pdf.

Ali nikako nisam nasao za win.

Sve gore probao ali nema

[Ovu poruku je menjao vojvoda1010 dana 11.10.2022. u 21:57 GMT+1]
[ vojvoda1010 @ 11.10.2022. 20:48 ] @
Da li bi mogla neka skripta da se napravi?
I kako je ubaciti? I gde?
[ vojvoda1010 @ 11.10.2022. 20:53 ] @
Naravno probao i bluestack da bi instalirao office lens ali toliko koci da nema svrhe. Zahtevan je.

Sve gore instalirao i nema tako "fleks" crop po nepravilnim linijama.

Da li postoji uopste alternativa za Windows, ne za linux, mac i dr.nego windows.

Nekada je bila verzija office lensa za win.
[ vojvoda1010 @ 12.10.2022. 15:36 ] @
https://play.google.com/store/...indymobileapp.document.scanner
[ Panta_ @ 12.10.2022. 16:18 ] @
Citat:
Da li bi mogla neka skripta da se napravi?
I kako je ubaciti? I gde?


Slično se traži na onom linku slike koji si postavio u prvoj poruci, a ne Windows aplikacija koja u slici traži konture određenog oblika i seče sliku do istih. Kao što je navedeno na pomenutom linku, to možeš da odradiš pomoću OpenCV API-ja koji je dostupan za C++, Java i Python programske jezike.

Ja sam se pomalo igrao sa pomenutom bibliotekom u Python-u i dobio ne tako loše rezultate.









Code (python):
import pathlib
import sys

import cv2 as cv
import numpy as np


def read_image(image):
    img = cv.imread(image)
    # if img.shape[1] > 1000:
    #     img = cv.resize(img, (img.shape[1]//2, img.shape[0]//2),
    #                     interpolation=cv.INTER_CUBIC)
    return img

def get_corners(image):
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    # blur = cv.GaussianBlur(gray, (5,5), cv.BORDER_DEFAULT)
    # canny = cv.Canny(blur, 125, 175)
    # cv.imshow('Canny', canny)
    _, thresh = cv.threshold(gray, 125, 255, cv.THRESH_BINARY)
    # cv.imshow('Thresh', thresh)

    # https://docs.opencv.org/4.x/dd...orial_py_contour_features.html
    contours, _ = cv.findContours(thresh, cv.RETR_LIST,
                                  cv.CHAIN_APPROX_SIMPLE)  # cv.CHAIN_APPROX_NONE
    contours = sorted(contours, key=cv.contourArea, reverse=True)

    for contour in contours:
        # approximate the contour
        perimeter = 0.05 * cv.arcLength(contour, True)
        corners = cv.approxPolyDP(contour, perimeter, True)
        # if contour with 4 points founded, break the loop
        if len(corners) == 4:
            break

    return corners


# Copy/Paste from
# https://pyimagesearch.com/2014...perspective-transform-example/
# or install: https://pypi.org/project/imutils/
def order_points(pts):
     # initialzie a list of coordinates that will be ordered
     # such that the first entry in the list is the top-left,
     # the second entry is the top-right, the third is the
     # bottom-right, and the fourth is the bottom-left
     rect = np.zeros((4, 2), dtype = "float32")
     # the top-left point will have the smallest sum, whereas
     # the bottom-right point will have the largest sum
     s = pts.sum(axis = 1)
     rect[0] = pts[np.argmin(s)]
     rect[2] = pts[np.argmax(s)]
     # now, compute the difference between the points, the
     # top-right point will have the smallest difference,
     # whereas the bottom-left will have the largest difference
     diff = np.diff(pts, axis = 1)
     rect[1] = pts[np.argmin(diff)]
     rect[3] = pts[np.argmax(diff)]
     # return the ordered coordinates
     return rect


def four_point_transform(image, pts):
     # obtain a consistent order of the points and unpack them
     # individually
     rect = order_points(pts)
     (tl, tr, br, bl) = rect
     # compute the width of the new image, which will be the
     # maximum distance between bottom-right and bottom-left
     # x-coordiates or the top-right and top-left x-coordinates
     widthA = np.sqrt(((br[0] - bl[0]) ** 2) + ((br[1] - bl[1]) ** 2))
     widthB = np.sqrt(((tr[0] - tl[0]) ** 2) + ((tr[1] - tl[1]) ** 2))
     maxWidth = max(int(widthA), int(widthB))
     # compute the height of the new image, which will be the
     # maximum distance between the top-right and bottom-right
     # y-coordinates or the top-left and bottom-left y-coordinates
     heightA = np.sqrt(((tr[0] - br[0]) ** 2) + ((tr[1] - br[1]) ** 2))
     heightB = np.sqrt(((tl[0] - bl[0]) ** 2) + ((tl[1] - bl[1]) ** 2))
     maxHeight = max(int(heightA), int(heightB))
     # now that we have the dimensions of the new image, construct
     # the set of destination points to obtain a "birds eye view",
     # (i.e. top-down view) of the image, again specifying points
     # in the top-left, top-right, bottom-right, and bottom-left
     # order
     dst = np.array([
          [0, 0],
          [maxWidth - 1, 0],
          [maxWidth - 1, maxHeight - 1],
          [0, maxHeight - 1]], dtype = "float32")
     # compute the perspective transform matrix and then apply it
     M = cv.getPerspectiveTransform(rect, dst)
     warped = cv.warpPerspective(image, M, (maxWidth, maxHeight))
     # return the warped image
     return warped


if __name__ == '__main__':
    if len(sys.argv) > 1:
        img_path = pathlib.Path(sys.argv[1])
    else:
        img_path = pathlib.Path(__file__).parent

    output_dir = f'{img_path.as_posix()}/output'
    pathlib.Path(output_dir).mkdir(exist_ok=True)

    for img in img_path.iterdir():
        if img.suffix.lower() in ('.png', '.jpg', '.jpeg'):
            image = read_image(img.as_posix())
            corners = get_corners(image)
            new_image = four_point_transform(image, corners.reshape(4, 2))
            image_name = f'{img.name.removesuffix(img.suffix)}_cropped{img.suffix}'
            cv.imwrite(f'{output_dir}/{image_name}', new_image)


Za pokretanje Python skripta je potrbno preuzeti i instalirati Python, zatim instalirati opencv-python paket. Python script pokrenuti sa python ime_skripta.py ako se slike nalaze u istom direktorijumu kao i sam skript ili sa python ime_skripta.py "/putanja/do/direktorijuma/sa/slikama".
[ vojvoda1010 @ 12.10.2022. 18:06 ] @
nece da instalira, prikazuje error
[ Panta_ @ 12.10.2022. 19:45 ] @
Vidi šta ti piše u tom log fajlu. Koja verzija Windowsa je pitanju, 32bit/64bit? Koji Python installer si preuzeo? Skini ovaj pa probaj.
[ vojvoda1010 @ 12.10.2022. 21:38 ] @
64bit.

i ovaj sam probao isto.

da je mi neki txt file
[ Panta_ @ 13.10.2022. 07:26 ] @
Pa vidi šta piše u tom fajlu, ili ga postavi ovde.
[ vojvoda1010 @ 15.10.2022. 21:39 ] @
u prilogu fajl
[ vojvoda1010 @ 16.10.2022. 10:27 ] @
ponovo