Εντοπισμός χρώμα και αφαιρέστε αυτό το χρώμα από την εικόνα

ψήφοι
0

Έχω captcha εικόνα με το είδος του φωτός μωβ εικόνα στο παρασκήνιο και σκούρο μπλε σαν χαρακτήρα. Στόχος μου είναι να προσδιορίσει το κείμενο από την εικόνα. Γι 'αυτό και προσπαθώ να αφαιρέσετε το φως πορφυρό χρώμα από το φόντο, έτσι ώστε η εικόνα μου θα είναι απαλλαγμένη από θόρυβο, αλλά δεν μπορώ να βρω την ακριβή κώδικα χρώματος για αυτή την εικόνα, καθώς είναι κάπως διαφορετική παντού, έτσι δεν είμαι σε θέση να καλύψουν εικόνα. Εδώ κωδικό μου

import numpy as np
from PIL import Image

im = Image.open('capture.png')

im = im.convert('RGBA')
data = np.array(im)

rgb = data[:,:,:3]
color = [27, 49, 89]   # Original value to be mask
black = [0,0,0, 255]
white = [255,255,255,255]
mask = np.all(rgb == color, axis = -1)
data[mask] = black
data[np.logical_not(mask)] = white

new_im = Image.fromarray(data)
new_im.save('new_file.png')

Έτσι σκέφτηκα, αν μπορώ να αφαιρέσετε το χρώμα σε κάθε συγκεκριμένο εύρος χρωμάτων όπως το [R: 0-20, G: 0-20, Β: 80-100] ίσως ότι θα θα λειτουργήσει. Μπορεί κάποιος να μου πει πώς μπορώ να το κάνουμε αυτό.

Οποιαδήποτε άλλη πρόταση για να λυθεί αυτό το πρόβλημα, θα πρέπει επίσης να εκτιμηθεί.

Δημοσιεύθηκε 09/10/2019 στις 18:59
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
0

Δεδομένου ότι φαίνεται να είναι μια ξεχωριστή απόχρωση από το κείμενο και το φόντο εκεί, το χρώμα κατωφλίου πρέπει να εργαστούν εδώ. Η ιδέα είναι να μετατρέψει την εικόνα σε μορφή HSV στη συνέχεια χρησιμοποιήστε μια άνω και κάτω όριο για να δημιουργήσει ένα δυαδικό τμηματική μάσκα τότε bitwise-και να εξαγάγετε το κείμενο. Εδώ είναι μια εφαρμογή με τη χρήση Python OpenCV


Χρησιμοποιώντας αυτό το άνω και κάτω όριο, παίρνουμε αυτή τη μάσκα

lower = np.array([0, 120, 0])
upper = np.array([179, 255, 255])

εισάγετε περιγραφή της εικόνας εδώ

Στη συνέχεια bitwise-AND και το χρώμα το λευκό φόντο για να πάρει αποτέλεσμα μας

εισάγετε περιγραφή της εικόνας εδώ

import numpy as np
import cv2

# Color threshold
image = cv2.imread('1.png')
original = image.copy()
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower = np.array([0, 120, 0])
upper = np.array([179, 255, 255])
mask = cv2.inRange(hsv, lower, upper)
result = cv2.bitwise_and(original,original,mask=mask)
result[mask==0] = (255,255,255)

cv2.imshow('mask', mask)
cv2.imshow('result', result)
cv2.waitKey()

Μπορείτε να χρησιμοποιήσετε αυτό το σενάριο όριο χρώματος HSV να προσδιοριστούν τα κατώτερα και ανώτερα όρια

εισάγετε περιγραφή της εικόνας εδώ

import cv2
import sys
import numpy as np

def nothing(x):
    pass

# Load in image
image = cv2.imread('1.png')

# Create a window
cv2.namedWindow('image')

# create trackbars for color change
cv2.createTrackbar('HMin','image',0,179,nothing) # Hue is from 0-179 for Opencv
cv2.createTrackbar('SMin','image',0,255,nothing)
cv2.createTrackbar('VMin','image',0,255,nothing)
cv2.createTrackbar('HMax','image',0,179,nothing)
cv2.createTrackbar('SMax','image',0,255,nothing)
cv2.createTrackbar('VMax','image',0,255,nothing)

# Set default value for MAX HSV trackbars.
cv2.setTrackbarPos('HMax', 'image', 179)
cv2.setTrackbarPos('SMax', 'image', 255)
cv2.setTrackbarPos('VMax', 'image', 255)

# Initialize to check if HSV min/max value changes
hMin = sMin = vMin = hMax = sMax = vMax = 0
phMin = psMin = pvMin = phMax = psMax = pvMax = 0

output = image
wait_time = 33

while(1):

    # get current positions of all trackbars
    hMin = cv2.getTrackbarPos('HMin','image')
    sMin = cv2.getTrackbarPos('SMin','image')
    vMin = cv2.getTrackbarPos('VMin','image')

    hMax = cv2.getTrackbarPos('HMax','image')
    sMax = cv2.getTrackbarPos('SMax','image')
    vMax = cv2.getTrackbarPos('VMax','image')

    # Set minimum and max HSV values to display
    lower = np.array([hMin, sMin, vMin])
    upper = np.array([hMax, sMax, vMax])

    # Create HSV Image and threshold into a range.
    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    mask = cv2.inRange(hsv, lower, upper)
    output = cv2.bitwise_and(image,image, mask= mask)

    # Print if there is a change in HSV value
    if( (phMin != hMin) | (psMin != sMin) | (pvMin != vMin) | (phMax != hMax) | (psMax != sMax) | (pvMax != vMax) ):
        print("(hMin = %d , sMin = %d, vMin = %d), (hMax = %d , sMax = %d, vMax = %d)" % (hMin , sMin , vMin, hMax, sMax , vMax))
        phMin = hMin
        psMin = sMin
        pvMin = vMin
        phMax = hMax
        psMax = sMax
        pvMax = vMax

    # Display output image
    cv2.imshow('image',output)

    # Wait longer to prevent freeze for videos.
    if cv2.waitKey(wait_time) & 0xFF == ord('q'):
        break

cv2.destroyAllWindows()
Απαντήθηκε 09/10/2019 στις 23:36
πηγή χρήστη

ψήφοι
0

Εδώ είναι μια προσέγγιση που χρησιμοποιεί μια σειρά pixel. συστοιχίες Pixel είναι αργή, αλλά εφόσον η ταχύτητα δεν είναι ένα ζήτημα, θα μπορούσε να εξυπηρετήσει τις ανάγκες σας χωρίς να χρειάζεται να κατεβάσετε κανένα εξωτερικό βιβλιοθήκες. Επίσης, συστοιχίες pixel είναι εύκολο να καταλάβει.

import pygame
# -- You would load your image as a sprite here. --
# -- But let's create a demonstration sprite instead.--
#
usecolor = (46,12,187,255)       # Declare an example color.
sprite = pygame.Surface((10,10)) # Greate a surface. Let us call it a 'sprite'.
sprite.fill(usecolor)            # Fill the 'sprite' with our chosen color.
#
# -- Now process the image. --
array = pygame.PixelArray(sprite)   # Create a pixel array of the sprite, locking the sprite.
sample = array[5,5]                 # Sample the integer holding the color values of pixel [5,5]
                                    # We will feed this integer to pygame.Color()
sample_1 = sprite.get_at((5,5))     # Alternately, we can use the .get_at() method.
# Do the same for every pixel, creating a list (an array) of color values.
del array                           # Then delete the pixel array, unlocking the sprite.

m,r,g,b = pygame.Color(sample) # Note: m is for the alpha value (not used by .Color()) 

print("\n sample =",sample,"decoded by python.Color() to:")
print(" r >>",r)
print(" g >>",g)
print(" b >>",b)
print("\n or we could use .get_at()")
print(" sample_1 =",sample_1)
print()
exit()

Ακριβώς δοκιμή κάθε r, g, b αξία για να δούμε εάν εμπίπτουν εντός κάποιου επιθυμητού εύρους για κάθε συστατικό χρώματος. Στη συνέχεια, αντιγράψτε κάθε pixel πάνω σε μια νέα επιφάνεια, που αντικαθιστά όλα τα χρώματα που βρίσκονται εντός της εμβέλειας σας με το επιθυμητό χρώμα αντικατάστασης.

Εναλλακτικά, μπορείτε να αφαιρέσετε, να πω 75 από κάθε R, G, στοιχείο το χρώμα Β (αν το χρώμα <0: color = 0), πριν την τοποθέτηση του pixel στη νέα εικόνα. Αυτό θα έχει ως αποτέλεσμα την εξασθένιση όλα τα χρώματα προς το μηδέν μέχρι να φύγει το χρώμα του φωτός. Στη συνέχεια, μπορείτε να επαναλάβετε τη διαδικασία προσθήκης 75 σε κάθε μη μηδενικό στοιχείο του χρώματος των pixel για να φέρει τα χρώματα προς τα εμπρός και πάλι. Αμφιβάλλω κάθε αξιοπρεπή επαλήθευσης είναι τόσο εύκολα νίκησε, αλλά θα πάτε εκεί.

Διασκέδαση διασκέδαση!

Απαντήθηκε 09/10/2019 στις 21:45
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more