라벨이 OpenCV인 게시물 표시

[CUDA] CUDA 공부 1 - 이미지 읽어와 GPU에 복사/가져오기

이미지
 자 이제 본격적으로 해보자 우선 이미지 읽어와서 GPU에 복사, GPU 메모리 안에서 복사, GPU에서 시스템 메모리로 복사 등을 해보자.   참조한 블로그 : Z-wony 님 블로그의 [CUDA] 02. Memory Copy 및 Crop   z-wony 님은 리룩스에서 작성하셨으나 난 윈도우니까 그에 맞게 소스를 수정하고 공부해보자 우선 프로젝트를 생성하고 속성에서 opencv 와 CUDA를 추가하자. (include, lib 추가)   기존 read_JPEG_file 함수를 opencv 함수로 바꾸고     cv::Mat Img;     Img = cv::imread(SAMPLE_IMG, CV_8U);     imgWidth = Img.cols;     imgHeight = Img.rows;      imgBuffer = Img.data; 회색조 이미지 이니까 pitch * 3 된 곳을 3배를 없앤다. imageWriteToGPU 함수 안에도 opencv 함수로 수정      cv::Mat Img = cv::Mat(height, width, CV_8U, hostMem).clone();      cv::imwrite(filepath, Img); 추후 GPU 구해서 GPUDirect Storage 를 구현하면 달라지겠지만 CUDA에서 사용하는 명칭을 사용하여 설명하자 CUDA에서는 기존 메모리 (시스템 메모리) 를 Host Memory GPU 메모리를 Device Memory 라고 한다. 이 두 메모리 간에 복사 및 GPU 메모리 내의 복사를 할 때 cudaMemcpy 나 cudaMemcpy2D 함수를 사용한다. cudaMemcpy2D(devPtr, // dst Buffer (Device) pitch, // Pitch size of dst (devPtr) imgBuffer, // src Buffer (Host) (size_t)(img

[Python] 이미지 크기 가져오는 함수

이미지
 간만에 파이썬으로 뭘 좀 하려다 보니 생각 안나는 것 투성이다. 매트랩이랑 같은 함수인데 기억도 안나고.... 매트랩을 한다고 해도 다시 공부해야 할 것 같다;; 오늘은 기본으로 돌아가서 이미지 크기를 가져오는 방법을 알아보자 단 한줄이면 끝나지만...ㅎㅎㅎ 이미지를 읽어 왔다고 가정하면 .shape 만 해주면 끝이다. img1 = cv2.imread(dirPath+filename1 , cv2.IMREAD_GRAYSCALE) h = img1.shape height = img1.shape[ 0 ] width = img1.shape[ 1 ] 위 소스는 그레이 스케일일 경우 이미지 크기를 읽어 오는 방법이다. 그레이 스케일일 경우 1차원 밖에 없기 때문에 높이와 넓이 두가지로 이루어진 튜플을 볼 수 있다. img1 = cv2.imread(dirPath+filename1 , cv2.IMREAD_COLOR) h = img1.shape height = img1.shape[ 0 ] width = img1.shape[ 1 ] 이번엔 컬러 이미지로 읽어 왔을 경우 h를 보면 높이, 넓이, 채널 수로 구성된 튜플임을 알 수 있다.

[Python] OpenCV 이미지 채널 별 분리

개인 프로젝트에도 시간을 할애해야하건만 출장이다 회사 프로젝트다 핑계거리가 많아 아무래도 점점 나태해져 가는 듯 하다. 파이썬을 이용한 주식 분석 및 자동 매매 프로그램이 최종 목표이기에 우선은 이미지 처리에 관심을 가져보자. 이미지 처리를 위해서 영상을 회색조로 바꾸어 처리하기도 하지만 R,G,B 각 채널별로 분리를 하기도 한다. 우선 코드를 보자 import cv2 img = cv2.imread( 'masala.jpg' , cv2.IMREAD_COLOR) cv2.imshow( 'img' , img) cv2.waitKey( 0 ) b , g , r = cv2.split(img) cv2.imshow( 'img_b' , b) cv2.imshow( 'img_g' , g) cv2.imshow( 'img_r' , r) cv2.waitKey( 0 ) cv2.destroyAllWindows() imread 함수를 이용하여 이미지를 읽어 온 후 한번 출력하고 waitKey 함수를 이용해 키보드의 입력을 기다린다. 키보드 입력이 들어오면 읽었던 이미지를 R,G,B 3개의 채널로 분리한 후 각각 채널별로 이미지 출력 후 다시 키보드의 입력을 받은 후 종료하는 간단한 코드이다. 여기서 주의할 점은 우리가 흔히 알고 있는 R,G,B 순서가 아닌 B,G,R 순서로 반환된다는 점이다.

[Python] OpenCv를 이용하여 마우스 위치 가져오기

이미지
이 얼마만에 쓰는 파이썬 관련 글이란 말인가 ㅠㅠ 영상처리에서 마우스 만큼 또 많이 쓰는 게 없으니 오늘은 마우스 포인터 위치 받아오는 함수를 만들어보도록 하자 구글링 해보면 나오지만 마우스 포인터 위치를 받아오는 방법은 1. pynput 모듈을 이용하는 방법 2. OpenCV를 이용하는 방법 3. PyQt를 이용하는 방법 크게 3가지 경우가 많이 쓰이는 것 같다. 여기선 2번 OpenCV를 이용해서 해보도록 하자 왜냐면 이미 깔려있는데다가 다른 것 깔기 귀찮음으로 ㅎㅎ OpenCV를 이용하려면 마우스 콜백함수를 이용하여 위치를 받아오면 된다. 일단 코드 부터 보도록 하자 import cv2 as cv # OpenCV import import numpy as np # 행렬(img)를 만들기 위한 np import # 마우스 이벤트 콜백함수 정의 def mouse_callback ( event , x , y , flags , param ): print ( "마우스 이벤트 발생, x:" , x , " y:" , y) # 이벤트 발생한 마우스 위치 출력 img = np.zeros(( 256 , 256 , 3 ) , np.uint8) # 행렬 생성, (가로, 세로, 채널(rgb)),bit) cv.namedWindow( 'image' ) #마우스 이벤트 영역 윈도우 생성 cv.setMouseCallback( 'image' , mouse_callback) while ( True ): cv.imshow( 'image' , img) k = cv.waitKey( 1 ) & 0xFF if k == 27 : # ESC 키 눌러졌을 경우 종료 print ( "ESC 키 눌러짐" ) break cv.destroyAllWindows()   해당

[Python] 파이썬에서 Opencv를 이용해 웹캠 영상 읽어오기 및 저장

이미지
자 이번엔 노트북에 달린 카메라를 이용해 영상을 받아 출력해보자 우선 코드를 보자 import cv2 cap = cv2.VideoCapture( 0 ) print ( 'width :%d, height : %d' % (cap.get( 3 ) , cap.get( 4 ))) while ( True ): ret , frame = cap.read() # Read 결과와 frame if (ret) : gray = cv2.cvtColor(frame , cv2.COLOR_BGR2GRAY) # 입력 받은 화면 Gray로 변환 cv2.imshow( 'frame_color' , frame) # 컬러 화면 출력 cv2.imshow( 'frame_gray' , gray) # Gray 화면 출력 if cv2.waitKey( 1 ) == ord ( 'q' ): break cap.release() cv2.destroyAllWindows() opencv를 import 해준 뒤 VideoCapture() 함수를 이용해 웹 캠을 연결 한다. 전달 인자는 디바이스 아이디를 넘겨주는데 0을 넣어주면 보통 웹캠이나 카메라에 연결 된다. print 문으로 기본 웹캠의 width 와 height를 출력해보도록 하자 프로그램을 종료하려면 q 버튼을 눌러주면 종료! 아래는 코드 실행 결과 [컬러 출력 결과] [Gray 출력 결과] [출력된 카메라 해상도] 영상 저장은 cv2.VideoWriter_fourcc() 를 이용하면 가능하다 매개변수로 코덱을 넘겨주는데 'D','I','V','X' 와 같이 넘겨주거나 아래와 같이 *'DIVX' 로 넘겨주면 됨 import cv2

[Python] 파이썬에서 Opencv를 이용해 이미지 읽기 및 쓰기

이미지
    자 이번엔 이전에 Opencv 설치에서 테스트 했던 코드를 살펴보고 이미지 읽어오기 및 쓰기에 대해 써보자 일단 코드는 아래와 같다! import cv2 fname = '1.jpg' # 읽어올 파일 이름   img = cv2.imread(fname , cv2.IMREAD_COLOR) # 파일 읽어오기 : 컬러로 읽기 gray_image = cv2.imread(fname , cv2.IMREAD_GRAYSCALE); # 파일 읽어오기 : 그레이로 읽기 cv2.imshow( 'image' , img) # 이미지 출력 cv2.imshow( 'Gray Image' , gray_image) cv2.waitKey( 0 ) # 키 입력 기다리기 (0일 경우 무한 대기) cv2.destroyAllWindows() # 창 없애기 일단 import cv2 으로 opencv를 import 하자 imread() 함수를 이용해서 이미지를 읽어오도록 하자 여기서 2번째 인자를 통해 읽어올 이미지 형식을 정할 수 있다. 위 코드 실행 결과!! [실행 결과..귀여운 피카츄!] 이제 이미지를 저장해보자 이미지 저장은 imwrite() 함수를 이용하면 된다. import cv2 fname = '1.jpg' img = cv2.imread(fname , cv2.IMREAD_COLOR) gray_image = cv2.imread(fname , cv2.IMREAD_GRAYSCALE); cv2.imshow( 'image' , img) cv2.imshow( 'Gray Image' , gray_image) cv2.waitKey( 0 ) cv2.destroyAllWindows() cv2.imwrite( '2.png' , gray_image) # 이미지 저장 코드를 실행하면

[Python] 파이썬 OpenCV 설치

이미지
한국에 온 후 사용하던 매트랩을 사용을 못하니 대신할 녀석으로 파이썬을 선택했다 우선 개발 속도가 빠른데다가 문법도 비슷하고 무엇보다 머신 러닝에 강력한 성능을 보여주니 앞으로 테스트 할 일이 있으면 파이썬을 이용해 진행하고자 한다 우선은 파이썬 용 OpenCV를 설치하도록 하자 일단 난 파이참을 이용하니까 파이참에서 설치 법은 다음과 같다. 파이참 메뉴 File -> Setting을 누르면 위와 같은 창이 나타난다. 왼쪽 메뉴에서 Project Interpreter 를 선택하면 오른쪽에 현재 설치 된 항목들이 나타난다. 제일 오른쪽 + 버튼을 누르면 설치할 수 있는 인터프리터들이 나오는 창이 뜬다. 검색창에 openCV를 검색하면 위와 같은 결과들이 나타나는데 그림과 이 opencv-python 을 선택하여 Install Package 버튼을 누르자! 설치가 완료 되면 다음 코드를 입력하고 그림 파일을 코드와 같은 디렉토리에 넣고 간단히 실행 테스트를 해보자 import cv2 fname = '1.jpg' img = cv2.imread(fname, cv2.IMREAD_COLOR) cv2.imshow('image',img) cv2.waitKey(0) cv2.destroyAllWindows() 아래와 같이 이미지가 뜨면 테스트 완료!!