파이썬에서 이미지를 읽고 정의 된 픽셀 순서로 다시 쓸 수있는 방법

소렌 세바스찬 프렐

현재 다음 방법을 찾으려고합니다.

  1. Python을 사용하여 이미지 파일 읽기

  2. 모든 픽셀 값을 HSV으로 읽기

  3. 이 값 배열을 먼저 정렬 H한 다음 S정렬V

  4. 새로 만든이 배열에서 numpy로 이미지를 만듭니다.

누군가 나를 올바른 방향으로 안내 할 수 있다면 매우 감사 할 것입니다.

편집 1 :

몇 가지 코드를 시도해 보았지만 결과가 나오지만 예상 한 것이 아닙니다. np.sort는 튜플을 열 중 하나가 아닌 총으로 정렬합니다. 누군가가 이것을 해결하는 방법에 대한 아이디어를 가지고있을 수 있습니다.

import glob
from PIL import Image, ImageDraw
import numpy as np
import os
import colorsys

#definition of HSL/HSV colorspace
def hsl(x):
        to_float = lambda x : x / 255.0
        (r, g, b) = map(to_float, x)
        h, s, l = colorsys.rgb_to_hsv(r,g,b)
        h = h if 0 < h else 1 # 0 -> 1
        return h, s, l


#get the image filenames
images = glob.glob("test/*.jpg")
print(images)


#output_folder generation
output_folder = 'test/out_new'
if not os.path.exists(output_folder):
    os.makedirs(output_folder)


#loop through all image filenames
for image in images:
    #load the current image
    im = Image.open(image) 
    
    #get a tuple of the x and y dimensions of the image
    width, height = im.size

    # creating empty img-array with same dimensions
    data = np.zeros((height, width, 3), dtype=np.uint8)
    #load the pixel info of image
    pix = im.load()
    width, height = im.size # get original size for processing

    img_filename = os.path.splitext(image)[0]+'_sorted.jpg'
    img_filename = os.path.split(img_filename)[1]
    img_filename = os.path.join(output_folder, img_filename)

        
    dataset = {}

    for x in range(width):
        for y in range(height):
            h = (pix[x,y][0])
            s = (pix[x,y][1])
            l = (pix[x,y][2])
            #make a unique id for this color to use as key
            uid = f'{h},{s},{l}'
        

            # use h,s,l pixel output for image. switched axis due to bug in 
            data[y][x] = [h, s, l]
            # uncomment for r,g,b pixel output for image
            #data[y][x] = [r, g, b]

            if not uid in dataset:
                dataset[uid] = 0
            #count one up for this key
            dataset[uid] += 1

         

    # sort pixel 
    data_sorted = np.sort(data, axis=0)
    # create image
    newimage = Image.fromarray(data_sorted)
    #newimage = Image.fromarray(data)
    # save image
    newimage.save(img_filename)

편집 2 : 제공된 코드 마크는 슬프게도 예상 된 결과를 산출하지 않습니다. 코드에 의해 생성 된 이미지는 원본 이미지와 동일한 색상의 픽셀을 포함해야하지만 정렬 된 방식이어야합니다. 따라서 원본의 모든 색상이 여전히 표시되어야합니다. 저는이 모든 것을 2 차원 이미지에서 H, S 및 V 배열의 3 차원을 (준) 시각화하는 방법을 만들기 위해 수행하고 있습니다.

원본 이미지 [1] : https://i.stack.imgur.com/hmiOE.jpg

마크 코드 [2]에 의해 생성 된 이미지 : https://i.stack.imgur.com/foHGC.jpg

지금까지 답변 해주셔서 감사합니다!

마크 코드는 실제로 HSV 로의 변환을 제안하면해야 할 일을합니다. 예제가 첨부되어 있습니다.

정렬 된 RGB 값 [3] : https://i.stack.imgur.com/WWiY1.jpg

마크 세첼

다음은 원하는 작업을 수행하는 코드입니다.

#!/usr/bin/env python3

import numpy as np
from PIL import Image

# Load image and convert to HSV
im = Image.open('image.png').convert('HSV')

# Convert to Numpy array and reshape to column vector of HSV pixels
pv = np.array(im).reshape(-1,3)

# Sort by H, S, V and convert back to original shape
res = pv[np.lexsort((pv[:,2], pv[:,1],pv[:,0]))]
res = res.reshape((im.height,im.width,3))

# Convert back to PIL Image, back to RGB and save
Image.fromarray(res, mode='HSV').convert('RGB').save('result.png')

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Matplotlib-RGB 이미지의 픽셀 강도를 다시 조정하는 방법

분류에서Dev

이미지 파일에서 텍스처 정보를 읽고 SDL2를 사용하여 픽셀을 얻는 가장 좋은 방법은 무엇입니까?

분류에서Dev

파이썬의 stdin에서 고정 된 줄 덩어리 (예 : 100)를 읽는 방법은 무엇입니까?

분류에서Dev

파이썬에서 (제한된) 계획에서 좌표를 픽셀로 표현하는 방법

분류에서Dev

파이썬에서 fstab을 읽고 수정하는 방법?

분류에서Dev

파이썬에서 이미지의 각 픽셀 값을 변경하는 방법은 무엇입니까?

분류에서Dev

공간으로 구분 된 데이터를 읽고 배열에 저장 한 다음 C ++의 새 텍스트 파일에 다른 순서로 쓰는 방법

분류에서Dev

Bash에서 파일을 닫지 않고 X 초마다 파일에 쓸 수있는 방법이 있습니까?

분류에서Dev

C #의 원시 픽셀 데이터에서 이미지를 만드는 다른 더 빠른 방법이 있습니까?

분류에서Dev

3 개 이미지의 픽셀 수를 동시에 계산하는 방법

분류에서Dev

이미지의 픽셀 화 된 부분을 찾는 방법

분류에서Dev

연결된 픽셀이있는 모양을 이진 이미지의 두 부분으로 분할하는 방법

분류에서Dev

파이썬에서 두 개의 서로 다른 구조화 된 엑셀을 비교하는 방법

분류에서Dev

GDAL GeoTiff는 지정된 픽셀에서 고도를 가져옵니다. C ++

분류에서Dev

파이썬에서 지정된 범위 내에서 이미지 픽셀의 좌표 찾기

분류에서Dev

장치의 plist에서 읽고 쓸 수 없지만 시뮬레이터에서는 가능합니다.

분류에서Dev

파이썬의 이미지에서 픽셀 값을 검색하기 위해 'for 루프'속도를 높이는 방법은 무엇입니까?

분류에서Dev

파이썬으로 정의 된 변수에서 파일 읽기

분류에서Dev

Node.js로 이미지를 읽고 쓸 수 있습니까?

분류에서Dev

파이썬에서 알파벳을 기준으로 줄 순서를 다시 정렬하는 방법

분류에서Dev

matplotlib에서 플로팅 된 선의 픽셀 좌표를 추출하는 방법이 있습니까?

분류에서Dev

db에서 저장된 이미지의 URI를 가져오고 이미지보기에 표시하는 방법

분류에서Dev

다른 이미지의 위치를 사용하여 이미지에서 픽셀의 위치를 삼각 측량하는 방법은 무엇입니까?

분류에서Dev

Pygame에서 이미지를 가져 와서 정의 된 함수로 다른 이름을 할당하는 방법

분류에서Dev

정수를 쓰고 C ++의 이진 파일에서 다시 읽습니다 : 잘못된 바이트 수

분류에서Dev

온라인에 저장된 json 파일을 읽고 발견시 이미지를 url로 변경하는 방법

분류에서Dev

Android의 Image View에서 Uri가 고정 된 이미지를 표시하는 방법

분류에서Dev

Numpy-4 개의 입력 이미지에서 새 이미지를 만들고 가장 밝은 픽셀을 선택하는 방법 (최대 (R + G + B))

분류에서Dev

386 * 389 png 이미지를 20 * 20 픽셀로 조정하는 방법

Related 관련 기사

  1. 1

    Matplotlib-RGB 이미지의 픽셀 강도를 다시 조정하는 방법

  2. 2

    이미지 파일에서 텍스처 정보를 읽고 SDL2를 사용하여 픽셀을 얻는 가장 좋은 방법은 무엇입니까?

  3. 3

    파이썬의 stdin에서 고정 된 줄 덩어리 (예 : 100)를 읽는 방법은 무엇입니까?

  4. 4

    파이썬에서 (제한된) 계획에서 좌표를 픽셀로 표현하는 방법

  5. 5

    파이썬에서 fstab을 읽고 수정하는 방법?

  6. 6

    파이썬에서 이미지의 각 픽셀 값을 변경하는 방법은 무엇입니까?

  7. 7

    공간으로 구분 된 데이터를 읽고 배열에 저장 한 다음 C ++의 새 텍스트 파일에 다른 순서로 쓰는 방법

  8. 8

    Bash에서 파일을 닫지 않고 X 초마다 파일에 쓸 수있는 방법이 있습니까?

  9. 9

    C #의 원시 픽셀 데이터에서 이미지를 만드는 다른 더 빠른 방법이 있습니까?

  10. 10

    3 개 이미지의 픽셀 수를 동시에 계산하는 방법

  11. 11

    이미지의 픽셀 화 된 부분을 찾는 방법

  12. 12

    연결된 픽셀이있는 모양을 이진 이미지의 두 부분으로 분할하는 방법

  13. 13

    파이썬에서 두 개의 서로 다른 구조화 된 엑셀을 비교하는 방법

  14. 14

    GDAL GeoTiff는 지정된 픽셀에서 고도를 가져옵니다. C ++

  15. 15

    파이썬에서 지정된 범위 내에서 이미지 픽셀의 좌표 찾기

  16. 16

    장치의 plist에서 읽고 쓸 수 없지만 시뮬레이터에서는 가능합니다.

  17. 17

    파이썬의 이미지에서 픽셀 값을 검색하기 위해 'for 루프'속도를 높이는 방법은 무엇입니까?

  18. 18

    파이썬으로 정의 된 변수에서 파일 읽기

  19. 19

    Node.js로 이미지를 읽고 쓸 수 있습니까?

  20. 20

    파이썬에서 알파벳을 기준으로 줄 순서를 다시 정렬하는 방법

  21. 21

    matplotlib에서 플로팅 된 선의 픽셀 좌표를 추출하는 방법이 있습니까?

  22. 22

    db에서 저장된 이미지의 URI를 가져오고 이미지보기에 표시하는 방법

  23. 23

    다른 이미지의 위치를 사용하여 이미지에서 픽셀의 위치를 삼각 측량하는 방법은 무엇입니까?

  24. 24

    Pygame에서 이미지를 가져 와서 정의 된 함수로 다른 이름을 할당하는 방법

  25. 25

    정수를 쓰고 C ++의 이진 파일에서 다시 읽습니다 : 잘못된 바이트 수

  26. 26

    온라인에 저장된 json 파일을 읽고 발견시 이미지를 url로 변경하는 방법

  27. 27

    Android의 Image View에서 Uri가 고정 된 이미지를 표시하는 방법

  28. 28

    Numpy-4 개의 입력 이미지에서 새 이미지를 만들고 가장 밝은 픽셀을 선택하는 방법 (최대 (R + G + B))

  29. 29

    386 * 389 png 이미지를 20 * 20 픽셀로 조정하는 방법

뜨겁다태그

보관