f = open(“test.txt”, ‘w’)
for j in range(0, 11): # 0 부터 시작해서 11개니까 0~10이다
   for i in range(0, 6): # 0 부터 시작해서 6개니까 0~5이다
    pixelx[j][i] = cX * i + j
      data1 = str(pixelx[j][i]) + '\t' 
      file1.write(data1)
   data1 = '\n'
   file1.write(data1)
file1.close()
file11 = open("./output/STDx.txt", 'r')
read = file11.read()
print(read)
======
결과
0       1       2       3       4       5
1       2       3       4       5       6
2       3       4       5       6       7
3       4       5       6       7       8
4       5       6       7       8       9
5       6       7       8       9       10
6       7       8       9       10      11
7       8       9       10      11      12
8       9       10      11      12      13
9       10      11      12      13      14
10      11      12      13      14      15

 

 

Posted by TwoTen
l

import numpy as np

import json

#다음과 같이 2차배열에 각각의 값을 저장한 후에

pixelx = [[0 for col in range(6)] for row in range(11)]

cX = 1

for j in range(0, 11): # 0 부터 시작해서 11개니까 0~10이다

     for i in range(0, 6): # 0 부터 시작해서 6개니까 0~5이다

          pixelx[j][i] = cX * i + j

with open('./array2.json', "w") as file:

     json.dump(pixelx, file)

file.close()

with open('./array2.json', "r") as file:

     data = json.load(file)

file.close()

print(pixelx)

print(data)

print("data[0][0] = ", data[0][0])

print("data[0][1] = ", data[0][1])

print("data[3][3] = ", data[3][3])

==================================

실행결과

[[0, 1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6, 7], [3, 4, 5, 6, 7, 8], [4, 5, 6, 7, 8, 9], [5, 6, 7, 8, 9, 10], [6, 7, 8, 9, 10, 11], [7, 8, 9, 10, 11, 12], [8, 9, 10, 11, 12, 13], [9, 10, 11, 12, 13, 14], [10, 11, 12, 13, 14, 15]]

[[0, 1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6, 7], [3, 4, 5, 6, 7, 8], [4, 5, 6, 7, 8, 9], [5, 6, 7, 8, 9, 10], [6, 7, 8, 9, 10, 11], [7, 8, 9, 10, 11, 12], [8, 9, 10, 11, 12, 13], [9, 10, 11, 12, 13, 14], [10, 11, 12, 13, 14, 15]]

data[0][0] = 0

data[0][1] = 1

data[3][3] = 6

=================================================

array2.json파일 저장내용

[[0, 1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6, 7], [3, 4, 5, 6, 7, 8], [4, 5, 6, 7, 8, 9], [5, 6, 7, 8, 9, 10], [6, 7, 8, 9, 10, 11], [7, 8, 9, 10, 11, 12], [8, 9, 10, 11, 12, 13], [9, 10, 11, 12, 13, 14], [10, 11, 12, 13, 14, 15]]

Posted by TwoTen
l

파이썬에서 객체를 바이트 변환하고 다시객체로 복원하는 것을 직렬화(Serialization), 이렇게 파이썬 객체를 일련의 바이트들로 변환하는 것을 직렬화(Serialization)라 하고, 다시 바이트들을 객체로 변환하는 것을 역직렬화(Deserialization)이라 한다.

파이썬에서 이와 같은 직렬화, 반직렬화는 pickle, cPickle을 사용할 수 있다.

Posted by TwoTen
l

gray=cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU )[1] 

이진화 처리는 간단하지만, 쉽지 않은 문제를 가지고 있다. 
이진화란 영상을 흑/백으로 분류하여 처리하는 것을 말합니다. 
이때 기준이 되는 임계값을 어떻게 결정할 것인지가 중요한 문제가 됩니다. 
임계값보다 크면 백, 작으면 흑이 됩니다. 
기본 임계처리는 사용자가 고정된 임계값을 결정하고 그 결과를 보여주는 단순한 형태입니다.

이때 사용하는 함수가 cv2.threshold() 입니다.

cv2.threshold(src, thresh, maxval, type) → retval, dst
Parameters:
src – input image로 single-channel 이미지.(grayscale 이미지)
thresh – 임계값
maxval – 임계값을 넘었을 때 적용할 value
type – thresholding type
thresholding type은 아래와 같습니다.
cv2.THRESH_BINARY
cv2.THRESH_BINARY_INV
cv2.THRESH_TRUNC
cv2.THRESH_TOZERO
cv2.THRESH_TOZERO_INV
아래 예제는 각 type별 thresholding 결과입니다.

 

Sample Code

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('gradient.jpg',0)

ret, thresh1 = cv2.threshold(img,127,255, cv2.THRESH_BINARY)
ret, thresh2 = cv2.threshold(img,127,255, cv2.THRESH_BINARY_INV)
ret, thresh3 = cv2.threshold(img,127,255, cv2.THRESH_TRUNC)
ret, thresh4 = cv2.threshold(img,127,255, cv2.THRESH_TOZERO)
ret, thresh5 = cv2.threshold(img,127,255, cv2.THRESH_TOZERO_INV)

titles =['Original','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']
images = [img,thresh1,thresh2,thresh3,thresh4,thresh5]

for i in xrange(6):
plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')
plt.title(titles[i])
plt.xticks([]),plt.yticks([])

plt.show()

여러 이미지를 하나의 화면에 보여줄때 plt.subplot() 함수를 사용합니다. 사용법은 위 소스나 Matplotlib Document를 참고하시기 바랍니다.

https://opencv-python.readthedocs.io/en/latest/doc/09.imageThresholding/imageThresholding.html

 

Posted by TwoTen
l

색상 공간 변환(Convert Color)은 본래의 색상 공간에서 다른 색상 공간으로 변환할 때 사용한다.
색상 공간 변환 함수는 데이터 타입을 같게 유지하고 채널을 변환한다.
입력된 이미지는 8 비트, 16 비트, 32 비트의 정밀도를 갖는 배열을 사용할 수 있다.
출력된 이미지는 입력된 이미지의 이미지 크기와 정밀도가 동일한 배열이 된다.
채널의 수가 감소하게 되어 이미지 내부의 데이터는 설정한 색상 공간과 일치하는 값으로 변환되며, 데이터 값이 변경되거나 채널 순서가 변경될 수 있다.

색상 공간 변환(Convert Color)은 본래의 색상 공간에서 다른 색상 공간으로 변환할 때 사용합니다.
색상 공간 변환 함수는 데이터 타입을 같게 유지하고 채널을 변환합니다.
입력된 이미지는 8 비트, 16 비트, 32 비트의 정밀도를 갖는 배열을 사용할 수 있습니다.
출력된 이미지는 입력된 이미지의 이미지 크기와 정밀도가 동일한 배열이 됩니다.
채널의 수가 감소하게 되어 이미지 내부의 데이터는 설정한 색상 공간과 일치하는 값으로 변환되며, 데이터 값이 변경되거나 채널 순서가 변경될 수 있습니다.

메인코드
import cv2

src = cv2.imread("Image/crow.jpg", cv2.IMREAD_COLOR)
dst = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)

cv2.imshow("src", src)
cv2.imshow("dst", dst)
cv2.waitKey()
cv2.destroyAllWindows()

세부코드
dst = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)


색상 공간 변환 함수(cv2.cvtcolor)로 이미지의 색상 공간을 변경할 수 있습니다.
dst = cv2.cvtcolor(src, code, dstCn)는 입력 이미지(src), 색상 변환 코드(code), 출력 채널(dstCn)으로 출력 이미지(dst)을 생성합니다.
색상 변환 코드는 원본 이미지 색상 공간2결과 이미지 색상 공간을 의미합니다.
원본 이미지 색상 공간은 원본 이미지와 일치해야합니다.
출력 채널은 출력 이미지에 필요한 채널의 수를 설정합니다.
Tip : BGR은 RGB 색상 채널을 의미합니다. (Byte 역순)
Tip : 출력 채널은 기본값을 사용하여 자동으로 채널의 수를 결정하게 합니다.


추가 정보Permalink
채널 범위Permalink
형식 범위
CV_8U 0 ~ 255
CV_16U 0 ~ 65535
CV_32F 0 ~ 1


색상 공간 코드Permalink
속성 의미 비고
BGR Blue, Green, Red 채널 -
BGRA Blue, Green, Red, Alpha 채널 -
RGB Red, Green, Blue 채널 -
RGBA Red, Green, Blue, Alpha 채널 -
GRAY 단일 채널 그레이스케일
BGR565 Blue, Green, Red 채널 16 비트 이미지
XYZ X, Y, Z 채널 CIE 1931 색 공간
YCrCb Y, Cr, Cb 채널 YCC (크로마)
HSV Hue, Saturation, Value 채널 색상, 채도, 명도
Lab L, a, b 채널 반사율, 색도1, 색도2
Luv L, u, v 채널 CIE Luv
HLS Hue, Lightness, Saturation 채널 색상, 밝기, 채도
YUV Y, U, V 채널 밝기, 색상1, 색상2
BG, GB, RG 디모자이킹 단일 색상 공간으로 변경
_EA 디모자이킹 가장자리 인식
_VNG 디모자이킹 그라데이션 사용


원본 이미지 색상 공간2결과 이미지 색상 공간에 색상 공간 코드를 조합하여 사용할 수 있습니다.

예) BGR2GRAY는 Blue, Green, Red 채널 이미지를 단일 채널, 그레이스케일 이미지로 변경합니다.

 

https://076923.github.io/posts/Python-opencv-10/#%EC%84%B8%EB%B6%80-%EC%BD%94%EB%93%9C

Posted by TwoTen
l