본문 바로가기

코딩124

[C++ opencv] 가장 쉽게 이미지 밝기 조절 하는 방법 본문 목표 OpenCV를 사용해서 영상처리를 할 때, 전에도 말했지만 무조건 흑백(grayscale) 이미지에서 연산을 처리해야 한다고 했다. 그 이유로는 연산처리 속도가 빨라지고 명확하게 할 수 있으므로, 오히려 정확도가 올라간다고 할 수 있다. 아무튼 이번에는 grayscale 이미지에서 밝기를 조절하는 방법을 알아보도록 한다. 키워드 : 사칙연산 ( + , - , * , / ) 원리 원리는 단순하다. grayscale은 0~255 의 값을 갖고있고, 이는 픽셀의 밝기 정도를 나타낸다. (1,1) 좌표의 픽셀의 밝기 값이 50 인데, 100으로 증가시키려면 어찌해야될지 생각해보자. 그러면 가장 단순하게 50만큼을 더해도 되고, 값을 2배로 증가시켜도 된다. 이미 초등학교를 다 뗏다면 방법은 다 알고 .. 2020. 6. 25.
[C++ opencv] 동영상 불러오기 VideoCapture() 본문 목표 OpenCV 를 사용하다 보면, 웹캠으로 실시간 영상을 받아와서 영상처리를 해야할 때도 있지만, 저장되어 있는 동영상 파일에서도 영상처리를 필요로 할 때가 많다. 이번에는 동영상 파일에서 프레임을 추출해 연산처리를 할 수 있는 방법을 알아본다. 키워드 : VideoCapture 알아볼 함수 원형 - 동영상 캡쳐 또는 불러오기 ( VideoCapture ) #include ... VideoCapture cap("test.mp4"); if (!cap.isOpened()) { printf("Can't open the video"); return -1; } ... VideoCapture '변수 이름'( "동영상 이름" ) : '변수 이름'은 "동영상 이름"에 해당하는 동영상 화면(frame)을 읽어온.. 2020. 6. 24.
[C++ opencv] 카메라, 웹캠 영상 입력받기 VideoCapture() 본문 목표 OpenCV를 사용하는 목적은 여러가지가 있을 수 있다. 정지되어 있는 사진, 움직이는 물체를 담은 동영상, 실시간 카메라 영상 등 다양하게 사용할 수 있는데, 이번에는 실시간 카메라 영상을 OpenCV에서 사용하는 방법에 대해서 알아본다. 키워드 : VideoCapture 알아볼 함수 원형 - 동영상 캡쳐 또는 불러오기 ( VideoCapture ) #include ... VideoCapture cap(0); if (!cap.isOpened()) { printf("Can't open the camera"); return -1; } ... VideoCapture '변수 이름'( '카메라 번호' ) : '변수 이름'은 '카메라 번호'에 해당하는 카메라 화면을 읽어온다. 노트북의 경우 내장 웹캠이.. 2020. 6. 24.
[C++ opencv] Grayscale 변환에 대한 고찰 1 본문 목표 OpenCV 를 사용하다 보면 Grayscale을 정말 많이 사용한다. 그 이유는 노이즈를 없애고 연산처리 속도를 빠르게 하면서 정확도를 향상시키기 위함이다. 하지만 imread( )에서 flag를 0으로 받아온 grayscale 이미지와 cvtColor( ) 함수를 사용해서 얻은 grayscale 이미지가 다를 수 있다는 사실을 아는 사람이 얼마나 될까 싶다. 이번 글에서는 Grayscale 에 대해서 전문적으로 다뤄보고 이에대한 여러가지 고찰에 대한 내용을 다뤄보려한다. Grayscale - 흑백 채널, 회색조 ( Grayscale ) 단순하게 해석하자면 컬러이미지에서 광도만을 표현한 색 채널이다. 밝은 부위는 하얀색, 어두운 부위는 검은색으로 표현되는 색 채널이다. 보통 0~255 까지의.. 2020. 6. 17.
[C++ opencv] 컬러이미지 흑백으로 변환 , RGB to Grayscale 본문 목표 OpenCV에서 이미지를 연산처리할 때, 흑백 이미지로 처리하는 것이 좋다. 컬러 이미지를 흑백 이미지로 변환해주는 방법에 대해서 알아본다. 키워드 : cvtColor( ) 알아볼 함수 원형 - 이미지 색채널 변경 ( Converter Color ) #include using namespace cv; using namespace std; ... Mat color_img = imread("Lenna.png"); Mat grayscale_img; cvtColor(color_img, grayscale_img, COLOR_BGR2GRAY); ... cvtColor( input Array, output Array, flag) : input Array를 입력받아 flag 에 대한 옵션으로 이미지 색채널을.. 2020. 6. 17.
[C++ opencv] 이미지 불러오고 보여주는 방법, imread() imshow() 본문 목표 OpenCV에서 이미지를 읽고 화면에 보여주는 기능을 담당하는 imread() 와 imshow() 함수에 대해서 알아본다. 키워드 : imread( ), imshow( ) 알아볼 함수 원형 - 이미지 읽기 & 불러오기 ( Image Read, imread() ) using namespace cv; using namespace std; ... Mat img = imread("Lenna.png", 1); imread( "fileName", flag) : fileName 에는 불러오고자 하는 이미지의 경로를 입력하고, flag는 불러오는 옵션을 입력한다. 불러오고자 하는 이미지가 프로젝트 폴더 안에 있다면 fileName 에 파일 이름을 입력하면 된다. 위와 같이 "Lenna.png" 라고 입력하면.. 2020. 6. 16.
가장 쉽고 정확하게 C++ OpenCV 설치하기 (모든버전 공통) 이미지 인식을 다루는 분들이라면 OpenCV를 모르는 분들이 없을 것이다. 아니 없어야 정상이다. 왜냐하면 C++ 또는 Python 에서 수 많은 라이브러리를 제공해주고 있는데, 모른다면 문제가 있다. 몰랐다면 이 기회에 알아가면 된다~ 아무튼 오늘은 C++ 용 OpenCV를 설치하는 방법을 알아보자 OpenCV를 C++ 로 사용하고 싶다면 우선 Windows 기준으로 VisualStudio 설치가 선행되어 있어야한다. VisualStudio가 설치 안 되어 있다면 아래 링크를 통해서 VisualStudio 를 설치하시길 바란다. https://diyver.tistory.com/49 VisualStudio 2019 무료 설치하는 방법, 처음부터 끝까지 대학교 공대를 다니시거나 다녔었던 분들은 거의 대부분.. 2020. 6. 15.
VisualStudio 2019 무료 설치하는 방법, 처음부터 끝까지 대학교 공대를 다니시거나 다녔었던 분들은 거의 대부분 VisualStudio로 C언어를 배우셨거나 다룬다. 오늘은 그 VisualStudio를 설치하는 방법을 알아보기로 한다. VisualStudio는 원래 유료프로그램이고, 지금도 유료프로그램이지만 무료로 사용할 수 있게 되었다. 커뮤니티라는 버전을 출시하면서부터 무료로 사용할 수 있게 되었다. 덕분에 예전의 버전들보다 더 많은 기능을 부담없이 사용할 수 있게 되었다. 물론 상업적 이용이나 제대로 된 개발을 한다면 유료판을 사용해야 할 것이다. 하지만 단순히 개인 프로젝트를 위한 것이라면 커뮤니티 버전으로 충분할 것이다. STEP 1 - 설치파일 다운로드 아래의 다운로드 사이트 주소에 들어가도록 한다. https://visualstudio.microso.. 2020. 6. 15.
피에조부저 수동, 능동 원리와 아두이노에서의 사용방법 경고 신호를 알려주는데 가장 흔히 사용하는 피에조부저에 대해서 글을 작성해본다. 컴퓨터 부저 비프음을 내는데에도 쓰인다. 수동과 능동의 차이는 간단하다. 능동부저는 5V 전원을 연결했을때, 소리가 난다. 수동부저는 5V 전원을 연결해도 소리가 나지 않는다. 능동부저는 단순히 소리를 내는데 사용되고, 수동부저는 음계를 사용해 멜로디를 낼 수 있다. 피에조부저는 주파수로 제어할 수 있다. 능동 부저는 단순히 +단자와 -단자만 조심히 하고, +단자에 디지털 신호를 주면 소리가 난다. 수동 부저는 음계에 맞는 주파수를 디지털 신호로 주어야한다. 사용되는 음계와 주파수의 관계는 위의 표를 참고하면 된다. - 아두이노(나노, 우노, 메가), 시리얼 통신 케이블, 점퍼선, 피에조 부저(수동 or 능동) int pie.. 2020. 5. 7.
초음파센서 HC-SR04 원리와 아두이노에서의 사용방법 초음파 센서중에서 가장 흔히 사용하는 HC-SR04 센서에 대해서 글을 작성해본다. 초음파 센서중에서 가장 저렴하며, 제일 쉽게 구할 수 있는 장점이 있는 센서이다. 각종 메이커톤, 발명대회에서 빠질 수 없는 센서 중 하나이다. 흔히 근접센서라고도 부른다. 초음파 센서는 초음파가 반사되어 오는데 걸린 시간을 이용하여 거리를 산출해낸다. 센서 전면부에 센싱을 하게 생긴 두개의 기둥이 존재한다. 하나는 발신부이고, 하나는 수신부이다. 발신부에서 초음파 파장이 발생되고, 직선상의 물체에 그 파장이 반사되어 돌아온다. 흔히 우리말로는 메아리 라고 하는 echo파장을 수신하고, 그 사이의 시간을 구하는게 핵심이다. 음속은 통상 340m/s 로 계산하는데, 등속운동이라는 가정하에 식을 세워보면 다음과 같다. [ t.. 2020. 5. 6.
아두이노 업로딩이 안 된다면! 아두이노 호환보드 CH340&CH341 드라이버 설치! [포크리에 사용된 이미지는 별도의 라이선스를 취득하여 제공되고 있습니다. 포크리 출처가 없으면 무단도용으로 저작권 분쟁에 휘말릴 수 있습니다. I made a thumbnail for free in website "www.forcre.co.kr"] 아두이노 정품은 UNO 기준으로 2만5천원~3만원 이라는 비싼 가격대에 구입할 수 있는데, 사실 아두이노 정품을 쓰는 사람은 거의 없을 것이다. 지원금으로 구입하는것 아닌이상 정품을 살 엄두가 안 날 뿐더러, 호환보드와 성능차이가 없기 떄문이다. 원래 호환보드는 아두이노와 똑같은 구성으로 제작이 되었다면, 오늘 다뤄볼 호환보드는 칩셋이 CH34x 계열이다. 정품 아두이노를 기반으로 하는 호환보드는 정품 아두이노처럼 그냥 아두이노 프로그램으로 업로딩이 잘 된다... 2020. 5. 6.
[아두이노 강좌] 예제로 배우는 아두이노 #8 timer interrupt() 사용법, delay 없이 LED 제어하기 - delay() 함수를 사용하지 않고, LED를 원하는 시간만큼 점등시키고 소등시킬 수 있다. - 아두이노(나노, 우노, 메가), 시리얼 통신 케이블, 브레드보드, led(백색) 이전 강의부터 계속 언급하지만, 원래는 1 led당 1저항이 원칙이다. 하지만 백색 led의 경우 타지않고 버틸 수 있기 때문에 편의성을 위해서 저항을 사용하지 않는다. 그리고 led가 없더라도 13번핀은 내부 led와 연결되어 있으므로 외부 led가 없어도 이번 강의를 이해하는데 문제 없다. const int ledPin = LED_BUILTIN;// the number of the LED pin int ledState = LOW; // ledState used to set the LED unsigned long previo.. 2020. 3. 30.
[아두이노 강좌] 예제로 배우는 아두이노 #7 DigitalInputPullup, 아두이노 내장 pullup 저항 이용하기 - 아두이노 내부 회로에 내장되어 있는 풀업저항을 pinMode() 함수를 사용하여 설정하고, digitalRead() 함수를 사용하여 스위치 상태를 읽은 후 digitalWrite() 함수를 이용하여 LED를 제어한다. - 아두이노(나노, 우노, 메가), 시리얼 통신 케이블, 브레드보드, led, 버튼(택트스위치) void setup() { //start serial connection Serial.begin(9600); //configure pin 2 as an input and enable the internal pull-up resistor pinMode(2, INPUT_PULLUP); pinMode(13, OUTPUT); } void loop() { //read the pushbutton val.. 2020. 3. 27.
[아두이노 강좌] 예제로 배우는 아두이노 #6 , 스위치 버튼으로 led 제어하기 - 아두이노에서 스위치 상태를 digitalRead() 함수를 통해 읽은 후, LED를 digitalWrite() 함수를 통해 제어한다. - 아두이노(나노, 우노, 메가), 시리얼 통신 케이블, 브레드보드, led, 저항 1~2개, 버튼(택트스위치) led에 원래 저항을 연결해주는것이 원칙이지만, 백색 led를 사용하는 경우에는 위와같이 간단하게 테스트해 볼 수 있다. 또한 스위치에 연결되어 있는 저항은 아무 저항이나 사용하면 된다. const int buttonPin = 2; // the number of the pushbutton pin const int ledPin = 13; // the number of the LED pin // variables will change: int buttonStat.. 2020. 3. 25.
[아두이노 강좌] 예제로 배우는 아두이노 #5 analogWrite( ), 아두이노로 pwm 출력하기 - analogWrite() 함수를 이용하여 전압 출력을 pwm 신호로 출력할 수 있다. - 아두이노(나노, 우노, 메가), 시리얼 통신 케이블, 브레드보드, led LED 사용하는데에는 저항이 필수적으로 필요하지만, 간단히 테스트를 위해서 이번에는 LED(백색)을 이용한다. 적색과 노란색, 녹색의 LED를 사용하시려면 저항이 필요합니다. 110옴 저항 사용 권장. LED의 긴다리(+극)를 9번핀에 연결한다. int led = 9; // the PWM pin the LED is attached to int brightness = 0; // how bright the LED is int fadeAmount = 5; // how many points to fade the LED by // the setup .. 2020. 3. 25.