반응형

아래 코드는 기본적으로 파이썬을 이용해서 영상을 추출할 수 있는 코드이다.

또한 cv2.cvtColor함수를 이용해 원본 영상을 gray로 변경해서 추출했다.

 

기본적으로 카메라가 있어야 하며 (노트북 가능)

numpy와 opencv 패키지가 깔려있어야 한다.

cv2.VideoCapture( 숫자 ) 는 컴퓨터에 연결된 카메라의 갯수만큼 1씩 증가한다. 기본카메라는 0으로 잡히고, 2대가 더 연결된다면, 1, 2 이렇게 잡힐 것이다.

import numpy as np
import cv2

# 기본이 0번, 만약 비디오가 2개이면 1번 cap이라는 변수에 넣어서 핸들링함.
cap = cv2.VideoCapture(0)

while(True):
    ret, frame = cap.read()     # 정상적인 값을 받으면, ret가 True이고, cap.read하면 한 프레임씩 읽어들임.

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    cv2.imshow('frame', frame)          #   한장을 받아서 연속적으로 프래임 출력.
    cv2.imshow('gray', gray)			#	기본 영상을 gray로 변환

    if cv2.waitKey(1) & 0xFF == ord('q'):   #   q가 나오면 종료
        break

cap.release()
cv2.destroyAllWindows()

(결과)

반응형

 

 

<영상에서 RGB색상 추출하기>

https://ansan-survivor.tistory.com/638

 

[Python OpenCV] 영상에서 R,G,B 색상 추출하기 (원본에서 빨강, 초록, 파랑 색만 골라서 추출)

아래 코드는 반드시 카메라가 있어야 하며, 카메라에 접근할 수 있는 드라이버가 설치되어야 한다. 노트북의 경우 카메라가 달려있기 때문에 바로 사용가능하다. 사용을 위해서는 라이브러리 op

ansan-survivor.tistory.com

 

 

반응형
반응형

 

아래 코드는 반드시 카메라가 있어야 하며, 카메라에 접근할 수 있는 드라이버가 설치되어야 한다.

노트북의 경우 카메라가 달려있기 때문에 바로 사용가능하다.

사용을 위해서는 라이브러리 opencv와 numpy가 있어야 한다.

 

# 라이브러리 다운로드
# pip install opencv-python
# pip install numpy


import cv2
import numpy as np

cap = cv2.VideoCapture(0)       # 카메라 모듈 사용.

while(1):
    ret, frame = cap.read()     #   카메라 모듈 연속프레임 읽기

    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)    # BGR을 HSV로 변환해줌

    # define range of blue color in HSV
    lower_blue = np.array([100,100,120])          # 파랑색 범위
    upper_blue = np.array([150,255,255])

    lower_green = np.array([50, 150, 50])        # 초록색 범위
    upper_green = np.array([80, 255, 255])

    lower_red = np.array([150, 50, 50])        # 빨강색 범위
    upper_red = np.array([180, 255, 255])

    # Threshold the HSV image to get only blue colors
    mask = cv2.inRange(hsv, lower_blue, upper_blue)     # 110<->150 Hue(색상) 영역을 지정.
    mask1 = cv2.inRange(hsv, lower_green, upper_green)  # 영역 이하는 모두 날림 검정. 그 이상은 모두 흰색 두개로 Mask를 씌움.
    mask2 = cv2.inRange(hsv, lower_red, upper_red)

    # Bitwise-AND mask and original image
    res = cv2.bitwise_and(frame, frame, mask=mask)      # 흰색 영역에 파랑색 마스크를 씌워줌.
    res1 = cv2.bitwise_and(frame, frame, mask=mask1)    # 흰색 영역에 초록색 마스크를 씌워줌.
    res2 = cv2.bitwise_and(frame, frame, mask=mask2)    # 흰색 영역에 빨강색 마스크를 씌워줌.

    cv2.imshow('frame',frame)       # 원본 영상을 보여줌
    cv2.imshow('Blue', res)           # 마스크 위에 파랑색을 씌운 것을 보여줌.
    cv2.imshow('Green', res1)          # 마스크 위에 초록색을 씌운 것을 보여줌.
    cv2.imshow('red', res2)          # 마스크 위에 빨강색을 씌운 것을 보여줌.

    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break

cv2.destroyAllWindows()
반응형

(파이썬 실행 결과)

red파라미터값이 주변 조명에 의해 잘 추출되지 않았다. 값을 수정하면 된다.

주변 빛의 밝기에 따라 추출값이 달라질 수 있다.

범위 값 파라미터를 적절히 변경하여 사용하면 된다.

 

 

<영상을 그레이로 변경하기>

https://ansan-survivor.tistory.com/639

 

[Python OpenCV] 파이썬 영상 추출하기, 회색(gray)으로 배경 변경하기

아래 코드는 기본적으로 파이썬을 이용해서 영상을 추출할 수 있는 코드이다. 또한 cv2.cvtColor함수를 이용해 원본 영상을 gray로 변경해서 추출했다. 기본적으로 카메라가 있어야 하며 (노트북 가

ansan-survivor.tistory.com

 

<RGB색상 합성하기>

https://ansan-survivor.tistory.com/640

 

[Python OpenCV] 파이썬 두 이미지 합치기, 두 이미지 합성 시키기 (RGB값 더하기)

Mask를 이용하여 두 이미지를 합성하는 예제 코드이다. 단, 두 이미지의 크기가 같아야 작동한다. 만약 이미지 크기가 조금이라도 다르다면 오류를 일으킨다. 여기서는 flippy.jpg 라는 이미지와 'log

ansan-survivor.tistory.com

 

 

 

반응형
반응형

이미지파일에 원하는 부분에 색상을 넣고, 글자를 넣는다.

 

원본파일은 아래와 같다. (mask.jpg)

이 파일을 아래 파이썬 코드를 실행시켜본다.

3개의 함수를 직접 만들었다.

'''

made by 안산드레이아스
https://ansan-survivor.tistory.com/

'''

import cv2

clickflag = 0       # 클릭상태 확인 전역변수 초기값 0

def draw_circle(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN :                         # 마우스 왼쪽버튼을 누르면
        cv2.circle(img, (x, y), 10, (255,0,0), -1)              # (x,y)마우스좌표 중심점으로 반지름 10, (B,G,R)색상, -1은 내부 모두 채움

def draw_rec(event, x,y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
        cv2.rectangle(img, (x,y), (x+100,y+100), (0,255,0), 3)  # (x,y)마우스좌표 중신점으로 100x100 사각형을 만듦

def free_drawing(event, x,y, flags, param):                     # 자유롭게 그리기
    global  clickflag                                           # 클릭상태를 확인 (전역 변수를 불러옴)

    if event == cv2.EVENT_LBUTTONDOWN:                          # 왼쪽버튼을 누르면 플레그를 1로
        clickflag = 1
    if event == cv2.EVENT_LBUTTONUP:                            # 버튼은 때면 0으로
        clickflag = 0

    if clickflag == 1:
        event = cv2.EVENT_MOUSEMOVE                             # 플레그가 1일때, 마우스가 움직여도 그림이 그려짐
        cv2.circle(img, (x, y), 10, (255, 0, 0), -1)

img = cv2.imread('./mask.jpg', cv2.IMREAD_COLOR)                                    # img에 이미지를 불러옴.
img = cv2.line(img,(0, 100), (1025, 100), (155,55,55),(30))                         # 위쪽에 가로 줄을 그음.
font = cv2.FONT_HERSHEY_DUPLEX                                                      # 텍스트의 폰트를 지정.

cv2.putText(img, "WARNNING!! This is DDOS Virus", (20, 90), font, 2,(0,0,155), 2, cv2.LINE_AA)  # 텍스트를 입력, 글자, 위치, 폰트, 크기 등

cv2.namedWindow('image')
cv2.setMouseCallback('image', free_drawing)         #  free_drawing함수 호출 (이곳에서 윈도우에서 실행결정)

while(1):
    cv2.imshow('image', img)
    if cv2.waitKey(20) & 0xFF == 0x1B:                  # 무한 반복중, 키보드 ESC 아스키코드가 들어오면 빠져나감.
        break

cv2.destroyAllWindows()             # 창을 종료

 

반응형

 

(결과)

먼저 위에 코드에 있는 "WARNNING!! This is DDOS Virus" 라는 텍스트가 쓰여지고 위에 길다란 직사각형이 생성된다.

이제 유저가 마우스 드레그를 하면 아래와 같이 그림이 그려진다. (hello world라고 써봤다)

그리고 ESC가 들어오면 해당창이 꺼진다.

 

 

 

 

 

반응형
반응형

사용전 라이브러리 opencv와 numpy가 필요하다.

라이브러리 설치법은 아래 참고

ansan-survivor.tistory.com/308

 

[Python OpenCV] 파이썬 바코드(barcode), QR코드 인식 프로그램 코드

먼저 바코드를 인식하는 open source 라이브러리를 제공해주는데, 그 라이브러리를 pip을 이용해 다운로드 한다. 윈도우의 cmd 창을 이용해서 다운받아본다. 총 3개의 라이브러리가 필요하다. 1. openCV

ansan-survivor.tistory.com

 

왜곡된 이미지에서 4개의 포인트를 지정하고 쭉 펼치는 테스트 함수다.

아래 좌표점은 테스트를 위해 미리 찾아서 넣은것이다.

'''

made by 안산드레이아스
https://ansan-survivor.tistory.com/

'''

# 왜곡된 이미지를 쭉 펼치는 테스트

import cv2
import numpy as np

img = cv2.imread('hough.jpg')
rows, cols, ch = img.shape

a = [[65,15],[481,13],[28,439],[508,445]]
b = [[0, 0],[1000, 0],[0,500],[1000,500]]   # 왼쪽위점, 오른쪽위점, 왼쪽아래점, 오른쪽아래점

pts1 = np.float32(a)
pts2 = np.float32(b)

img = cv2.circle(img, (a[0][0], a[0][1]), 3, (0,0,255),-1)
img = cv2.circle(img, (a[1][0], a[1][1]), 3, (0,0,255),-1)
img = cv2.circle(img, (a[2][0], a[2][1]), 3, (0,0,255),-1)
img = cv2.circle(img, (a[3][0], a[3][1]), 3, (0,0,255),-1)
#cv2.circle(img, c, 5, (55, 255, 55), -1)

M = cv2.getPerspectiveTransform(pts1, pts2)
dst = cv2.warpPerspective(img, M, (1000, 500))  # 변환후 크기 (x좌표, y좌표)

cv2.imshow('imgage',img)
cv2.imshow('dst', dst)
cv2.waitKey(0)
반응형

테스트 이미지(hough.jpg)

(결과) 왼쪽 원본이미지에서 찍은 4개 좌표, 오른쪽 쭉 펼치기

 

 

 

반응형
반응형

아래와 같은 이미지에 선분을 파악하고, 그 선분의 중심에 수직선을 긋는 코드

파일명 drawing_normalLine.png 으로 사용

'''

made by 안산드레이아스
https://ansan-survivor.tistory.com/

'''

# 직선을 탐지하여 수직선을 그려줌.

import cv2
import numpy as np

img = cv2.imread('drawing_normalLine.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hier = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

for contour in contours:

    # then apply fitline() function
    [vx, vy, x, y] = cv2.fitLine(contour, cv2.DIST_L2, 0, 0.01, 0.01)
    nx, ny = 1, -vx / vy
    mag = np.sqrt((1 + ny ** 2))
    vx, vy = nx / mag, ny / mag

    # Now find two extreme points on the line to draw line
    lefty = int((-x*vy/vx) + y)
    righty = int(((gray.shape[1]-x)*vy/vx)+y)

    #Finally draw the line
    cv2.line(img,(gray.shape[1]-1,righty),(0,lefty),255,2)
    cv2.imshow('img',img)
    cv2.waitKey(0)

cv2.destroyAllWindows()

 

반응형

 

(결과) 하나의 직선만 그었지만, for문을 잘 활용해서 돌리면 모두 가능하다

 

반응형
반응형

파이썬을 이용해서 글자를 인식하는 프로그램이다.

아래 블로거님을 참고해서 제작 했다. 

 

(참고 링크)

junyoung-jamong.github.io/computer/vision,/ocr/2019/01/30/Python%EC%97%90%EC%84%9C-Tesseract%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-OCR-%EC%88%98%ED%96%89%ED%95%98%EA%B8%B0.html

 

Python에서 Tesseract 사용하기 for OCR

Tesseract 이미지로부터 텍스트를 인식하고, 추출하는 소프트웨어를 일반적으로 OCR이라고 한다. Tesseract는 1984~1994년에 HP 연구소에서 개발된 오픈 소스 OCR 엔진이며, 현재까지도 LSTM과 같은 딥러닝

junyoung-jamong.github.io

 

글자 인식을 위해서는 별도의 tesseract 프로그램이 필요하다. 설치방법은 위에 블로그를 참고 바란다.

아래 아이콘같은 파일이 다운로드 된다. 

 

1. tesseract 설치하기

기본적으로 영어만 인식하게 되어있으며, 다른언어를 인식하게 끔 하려면 옵션선택을 해야 한다.

한국어 인식을 위해 korean 선택

2. tesseract 환경변수 등록하기

    2-1. 단축키 Window + S 키를 누르고 환경 이라고 쓴다.

    2-2. 환경변수 - path를 편집

    2-3. 프로그램 다운로드 위치인 C:\Program Files\Tesseract-ORC 를 등록한다. (필자는 62비트)

          32비트인 사람들은 C:\Program Files (x86)\Tesseract-ORC 에 있을 것이다.

환경변수를 등록하고 저장

    2-4. cmd로 tesseract 라고 치면 아래와 같이 나와야 설치 및 설정이 된것이다.

반응형

3. 필요한 라이브러리 패키지 설치

 

해당 코드를 사용하기 위해서는 아래 라이브러리가 필요하다.

필자는 opencv만 있으므로 나머지 2개를 추가로 설치했다.

 

- 패키지 설치
pip install pillow
pip install pytesseract
pip install opencv-python

pip install pillow
pip install pytesseract
pip install opencv-python

pillow 설치
pytesseract 설치

파이썬 코드

'''
    reference link : https://junyoung-jamong.github.io/computer/vision,/ocr/2019/01/30/Python%EC%97%90%EC%84%9C-Tesseract%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-OCR-%EC%88%98%ED%96%89%ED%95%98%EA%B8%B0.html
    Have to download OCR program firstly.
    Link : https://github.com/UB-Mannheim/tesseract/wiki
    environment    : Window 10, python 3.6
    tesseract ver  : v5.0.0.20190526.exe

    - 이미지 글자 추출 테스트
    cmd > tesseract path\name.png stdout

    - 패키지 설치
    pip install pillow
    pip install pytesseract
    pip install opencv-python
'''

import cv2
import os
try:
    from PIL import Image
except ImportError:
    import Image
import pytesseract

# 설치한 tesseract 프로그램 경로 (64비트)
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract'
# 32비트인 경우 => r'C:\Program Files (x86)\Tesseract-OCR\tesseract'

# 이미지 불러오기, Gray 프로세싱
image = cv2.imread("digit.png")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# write the grayscale image to disk as a temporary file so we can
# 글자 프로세싱을 위해 Gray 이미지 임시파일 형태로 저장.
filename = "{}.png".format(os.getpid())
cv2.imwrite(filename, gray)

# Simple image to string
text = pytesseract.image_to_string(Image.open(filename), lang=None)
os.remove(filename)

print(text)

cv2.imshow("Image", image)
cv2.waitKey(0)

위 코드는 이미지파일에서 글자(숫자, 영어)를 추출해서 text로 출력한다.

 

(테스트 1 - 숫자 출력 ) digit.png 파일

원본 이미지
출력 결과, 숫자가 잘 출력 되었다.

(테스트 2 - 영어와 숫자 출력 ) eng_digit.png 파일

원본 이미지
약간 이상한 특수문자가 끼어있지만, 대체로 출력 되었다.

(테스트 3 - 긴 영어문장 출력 ) sentences.png 파일

원본 이미지

(테스트 4 - 코드에 한글 옵션을 추가해서 한글도 출력해본다.)

아래 옵션을 'kor' 로 변경
원본이미지
안타깝게도 일부 잘 보이는 글자들만 인식되고 나머지는 생략되었다.

 

글자가 명확할 수록 더 잘 인식이 된다.

여러가지 테스트를 해보길 바란다.

 

 

 

<영상처리 관련 독특한 직업 스마트시티CCTV 관제사 자격증>

https://ansan-survivor.tistory.com/921

 

독특한 자격증, 스마트시티 CCTV 관제사 자격증! (스마트시티 자격증, 4차산업 자격증)

4차산업 혁명과 AI 빅데이터가 발전하고 있는 요즘에는 다양한 독특한 자격증들이 생겼다. 이중 아주 특이한 CCTV관제사 자격증이란 것이 있다. 큰 장점은 다양한 업종에서 종사할 수 있다. 요즘

ansan-survivor.tistory.com

 

반응형
반응형

이전 포스팅과 마찬가지로 cv2 라이브러리와가 필요하다.

라이브러리 설치 방법은 아래 참고.

ansan-survivor.tistory.com/308

 

[Python OpenCV] 파이썬 바코드(barcode), QR코드 인식 프로그램 코드

먼저 바코드를 인식하는 open source 라이브러리를 제공해주는데, 그 라이브러리를 pip을 이용해 다운로드 한다. 윈도우의 cmd 창을 이용해서 다운받아본다. 총 3개의 라이브러리가 필요하다. 1. openCV

ansan-survivor.tistory.com

 

이 코드는 어떤 이미지가 흐릿할때 색상들을 강조시켜 선명하게 보이게 하는 코드이다.

동일 디렉터리에 name.png 라는 파일이 있다고 가정하면, 이 코드가 시행되고나서 그 파일의 색상들이 강조된다.

import cv2

'''
    함수) 이미지를 더 선명하게 Contrast(대조) 기법을 적용시킴.
        param : 컬러 이미지
        return : 대조된 이미지
'''


def img_Contrast(img):
    # -----Converting image to LAB Color model-----------------------------------
    lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)

    # -----Splitting the LAB image to different channels-------------------------
    l, a, b = cv2.split(lab)

    # -----Applying CLAHE to L-channel-------------------------------------------
    clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8, 8))
    cl = clahe.apply(l)

    # -----Merge the CLAHE enhanced L-channel with the a and b channel-----------
    limg = cv2.merge((cl, a, b))

    # -----Converting image from LAB Color model to RGB model--------------------
    final = cv2.cvtColor(limg, cv2.COLOR_LAB2BGR)

    return final


img = cv2.imread('name.png')
img = img_Contrast(img)

cv2.imshow('a', img)
cv2.waitKey(0)

 

반응형

 

(테스트) 출처 이미지: www.canstockphoto.co.kr/%EB%82%98%EB%AC%B4-%ED%9D%90%EB%A6%BF%ED%95%9C-%EC%95%84%EC%B9%A8-%EA%B0%80%EC%9D%84-%ED%96%87%EB%B9%9B-%EC%86%8C%EB%82%98%EB%AC%B4-%EC%88%B2-64441841.html

파이썬 적용 전 이미지

파이썬 코드 구동

파이썬 적용 후 이미지

반응형
반응형

두개의 이미지 파일을 하나의 이미지로 합치는 파이썬 코드이다.

 

'''
    참고 링크: https://copycoding.tistory.com/159
'''

import cv2
import numpy as np

# 사이즈 조절 W, H
size = (1280, 960)

# 좌우 이미지 불러오기
leftimg = cv2.imread('1.bmp')
rightimg = cv2.imread('2.bmp')

# 사이즈 조정
leftimg = cv2.resize(leftimg, size)
rightimg = cv2.resize(rightimg, size)

# 이미지 좌우 합치기
add_img = np.hstack((leftimg, rightimg))

cv2.imshow('leftimg', leftimg)
cv2.imshow('rightimg', rightimg)
cv2.imshow('add_img', add_img)

cv2.waitKey(0)

참고한 블로그는 아래 링크

https://copycoding.tistory.com/159

 

OpenCV 이미지 붙이기

두개의 이미지를 옆에 또는 아래쪽에 붙이는 기능 입니다. 단순한 기능이라 자세한 설명은 필요가 없을 것 같고 주의 사항으로는 가로로 붙이는 경우 높이가 같아야 하고 세로로 붙이는 경우는

copycoding.tistory.com

 

 

반응형
123

+ Recent posts