【Python】 OpenCV에 의한 화상의 픽셀에의 액세스와 잘라내기 (초보자용)

소개



OpenCV를 사용하여 이미지를 어떻게 잘라내는지 설명합니다. 일단지난번의 계속이므로, 만약 이 기사로 모르는 곳이 있으면, 봐 주세요.

환경



MacOS Mojave
파이썬 3.7

사용 이미지



다음 이미지(neko.jpg)를 사용합니다.


이미지의 크기 확인



아래 코드로 이미지의 크기를 확인할 수 있습니다.
#ライブラリの読み込み
import cv2
import matplotlib.pyplot as plt

img = cv2.imread("neko.jpg")
print(img.shape)

위의 코드를 실행하면 다음과 같은 결과가 나옵니다.
(900, 1600, 3)

이것은 세로가 900 픽셀, 가로가 1600 픽셀, 채널 수가 3이라는 의미입니다. 채널수는 컬러 화상의 경우는 GBR의 3개이므로, 3이 됩니다. 그레이스케일이라면, 백색의 정도만이므로, 채널수는 1이 됩니다.

이미지 좌표



Opencv에서 이미지의 좌표축은 다음과 같습니다.


위치를 (x, y)로 할 때 원점 (0,0)은 그림과 같이 왼쪽 위로 옵니다. 화상을 취급하는 경우는 아래 방향이 y축의 양의 방향이 되므로 주의해 주십시오.
이 이미지의 크기는 세로가 900픽셀, 가로가 1600픽셀이므로 이미지의 끝 픽셀의 x, y 좌표는 각각 899,1599입니다. 900, 1600이 되지 않는 이유는 원점 0부터 계산하기 때문입니다.

이미지 좌표에 액세스



이미지의 좌표를 아래와 같이 지정하면, 그 위치의 색의 값을 취득할 수 있습니다.
img = cv2.imread("neko.jpg")
print(img[450,800])

출력
[153 161 190]

이는 좌표(450,800) 위치의 색이 (R,G,B) = (153,161,190)임을 나타냅니다.
또, 이하와 같이 하면 좌표를 복수 지정할 수 있게 됩니다.
print(img[450:650,800:1000])
[[[153 161 190]
  [153 161 190]
  [152 160 189]
  ...
  [169 178 205]
  [169 178 205]
  [169 178 205]]

 [[152 160 189]
  [152 160 189]
  [153 161 190]
  ...
  [169 178 205]
  [169 178 205]
  [169 178 205]]

 [[151 159 188]
  [152 160 189]
  [154 162 191]
  ...
  [171 178 205]
  [172 179 206]
  [172 179 206]]

 ...
以下省略。。。


[] 안에있는 ":"는 우리가 평소 숫자의 범위를 나타낼 때 사용하는 "~"와 같다고 생각하십시오. 위의 예에서는 좌표(450,800)부터 (649,999)까지의 범위의 색 정보를 출력하고 있습니다.


임의의 위치에서 잘라내기



지정한 이미지의 범위를 다른 오브젝트에 넣으면 그 위치를 잘라낸 이미지를 얻을 수 있습니다.
#ライブラリの読み込み
import cv2
import matplotlib.pyplot as plt

img = cv2.imread("neko.jpg")
#指定した画素をimg_trimに代入
img_trim = img[450:650,800:1000]
#色を変更
img_trim = cv2.cvtColor(img_trim, cv2.COLOR_BGR2RGB)
#表示
plt.imshow(img_trim)
plt.show()



이상과 같은 이미지가 출력되면 성공입니다!
다음 번은 이미지의 확대 축소 반전 등, 반죽 돌리는 작업을 해설하고 싶습니다

Twitter하고 있습니다.



향후의 기사의 정보나 질의 응답등 여러가지 하고 싶다고 생각하므로 좋으면, 팔로우 부탁드립니다,,,!
htps : // 라고 해서 r. 코m/류지 33722052

좋은 웹페이지 즐겨찾기