2016-06-05 6 views
1

openCV imread 기능을 사용하여 컬러 이미지를 가져 왔습니다.파이썬에서 이미지의 특정 RGB 값의 픽셀 인덱스를 얻는 방법은 무엇입니까?

im = cv2.imread('test.jpg') 

[255, 255, 255]의 픽셀 값을 갖는 흰색 픽셀의 색인을 찾으려고합니다. 저는 사실 메신저가 3D 배열 인 것을 압니다. 하지만 이상한 것은 im [0,0]의 값이 [255, 255, 255]가 아니라 [255 255 255]입니다. 그리고 im [0,0,0]은 255입니다. 따라서 [255 255 255]는 목록이나 다른 것으로 보이지만 실제로는 [255, 255, 255]와 동일하지 않습니다.

>>> print im[0,0] 
[255 255 255] 

>>> print im[0,0,0] 
255 

그래서 제 질문은 다음과 같습니다

  1. [255 255 255]과 [255, 255, 255]의 차이점은 무엇입니까?
  2. 모든 픽셀의 색인을 어떻게 얻을 수 있습니까? 어떤 검색 알고리즘을 사용해야합니까?
+0

C++에서는 흰색 픽셀의 마스크에'cv :: findNonZero'를 사용합니다 :'cv :: Mat1b mask; cv :: inRange (img, cv :: Scalar (255,255,255), cv :: Scalar (255,255,255), mask); std :: vector pts; cv :: findNonZero (마스크, pts);'. 파이썬 래퍼에서도 비슷한 것이 있어야한다. 또는 Numpy 시설을 사용하는 일부 shurtcut ... – Miki

답변

0

모든 흰색 픽셀의 인덱스를 얻고 싶은 경우에, 당신은 2 차원 배열로 이미지를 변환 한 후 지수에게

import operator 

image = cv2.imread("test.jpg") 
img = image.astype('float') 
img = img[:,:,0] # convert to 2D array 
row, col = img.shape 
for i in range(row): 
    for j in range(col): 
     if img[i,j] == 255: 
      x.append(i) # get x indices 
      y.append(j) # get y indices 

주 그 이미지 [0,0]을 찾을 수는 2 차원 매트릭스를 보여줍니다 이미지 [0,0,0]은 0- 컬러 밴드를 가진 3D 매트릭스를 보여줍니다. 이 요소는 기본적으로 이미지의 색상 대역을 정의합니다. 세 번째 요소를 지정하지 않으면 이미지의 각 색상 대역에 대해 세 개의 값이 표시됩니다. 그러나 당신이 색깔 악대를 말할 때, 당신에게 정확한 화소 가치를 보여줄 것이다.

참고 : 이미지를 2D 배열로 변환 할 필요가 없습니다. 당신은 항상 실제 배열을 위해 그것을 할 수 있습니다. 알고리즘을 설명하기 위해서 그렇게했습니다.

관련 문제