2021. 1. 4. 00:29ㆍOpenCV/OpenCV C++
1.이미지 불러오고 보여주기
이미지 읽기 & 불러오기 ( Image Read, imread() )
using namespace cv;
using namespace std;
...
Mat img = imread("Lenna.png", 1);
imread("fileName", flag)
fileName : 불러오고자 하는 이미지의 경로를 입력
flag : 불러오는 옵션
이미지 보여주기 ( Image Show, imshow() )
...
imshow("img", img);
waitKey(0);
...
imshow("windowName", image)
windowName : 이미지를 보여줄 윈도우 창의 이름을 입력
image : Mat 형식의 image 변수 이름을 입력
waitKey(delay time)
delay time : 키입력을 기다릴 시간을 입력
보통 imshow() 함수를 사용하게 되면, 거의 waitKey()함수가 필수적으로 따라온다.
테스트 코드
#include <opencv2/highgui.hpp>
using namespace cv;
using namespace std;
int main(int ac, char** av) {
Mat color_img = imread("Lenna.png",IMREAD_COLOR);
Mat grayscale_img = imread("Lenna.png", IMREAD_GRAYSCALE);
Mat unchanged_img = imread("Lenna.png", IMREAD_UNCHANGED);
Mat reduced_img = imread("Lenna.png", IMREAD_REDUCED_COLOR_2);
Mat reduced_grayscale_img = imread("Lenna.png", IMREAD_REDUCED_GRAYSCALE_4);
imshow("color_img", color_img);
imshow("grayscale_img", grayscale_img);
imshow("unchanged_img", unchanged_img);
imshow("reduced_img", reduced_img);
imshow("reduced_grayscale_img", reduced_grayscale_img);
waitKey(0);
return 0;
}
결과
2. 이미지 색채널 변경 ( Converter Color )
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
...
Mat color_img = imread("Lenna.png");
Mat grayscale_img;
cvtColor(color_img, grayscale_img, COLOR_BGR2GRAY);
...
cvtColor( inputArray, outputArray, flag)
input Array 를 입력 받아 flag에 대한 옵션으로 이미지 색채널을 변경하여 outputArray에 저장한다.
테스트 코드
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int ac, char** av) {
Mat color_img = imread("Lenna.png");
Mat grayscale_img;
cvtColor(color_img, grayscale_img, COLOR_BGR2GRAY);
imshow("color_img", color_img);
imshow("grayscale_img", grayscale_img);
waitKey(0);
return 0;
}
결과
3. 이미지 밝기 조절
OpenCV를 사용해서 영상처리를 할 때 흑백(grayscale) 이미지에서 연산을 처리해야 한다.
연산처리 속도가 빨라지고 명확하게 할 수 있으므로, 오히려 정확도가 올라간다.
grayscale 이미지에서 밝기를 조절하는 방법을 알아보려고 한다.
가장 쉬운 방법은 사칙연산을 이용한 밝기 조절이다.
덧셈 뺄셈
테스트 코드
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int ac, char** av) {
Mat img_1 = imread("Lenna.png",0); //이미지를 grayscale로 불러옴
Mat img_2 = img_1 + 100;
Mat img_3 = img_1 - 100;
imshow("original", img_1);
imshow("img_sum", img_2);
imshow("img_sub", img_3);
waitKey(0);
return 0;
}
결과
곱셈 나눗셈
테스트 코드
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int ac, char** av) {
Mat img_1 = imread("Lenna.png",0); //이미지를 grayscale로 불러옴
Mat img_2 = img_1 * 2;
Mat img_3 = img_1 / 2;
imshow("original", img_1);
imshow("img_mul", img_2);
imshow("img_div", img_3);
waitKey(0);
return 0;
}
결과
Histogram을 이용한 이미지 밝기 조절
히스토그램(histogram) : 이미지의 밝기 값이 0~255 까지 있을 때, 픽셀들이 얼마나 그 값들을 갖고 있는지 알려주는 그래프
히스토그램 균일화 ( equalizeHist )
...
Mat img_1 = imread("Lenna.png", 0); //이미지를 grayscale로 불러옴
Mat hist_img;
equalizeHist(img_1, hist_img);
...
equalizeHist(Input Array, Output Array)
InputArray(입력 이미지)의 히스토그램 정보를 통해서 균일화를 해준 후 해당 정보를 Output Array(결과 이미지)에 저장한다.
코드 테스트
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int ac, char** av) {
Mat img_1 = imread("Lenna.png", 0); //이미지를 grayscale로 불러옴
Mat hist_img;
equalizeHist(img_1, hist_img);
imshow("Original", img_1);
imshow("Histogram equalization", hist_img);
waitKey(0);
return 0;
}
결과
'OpenCV > OpenCV C++' 카테고리의 다른 글
C++ OpenCV Labeling (0) | 2021.01.20 |
---|---|
C++ OpenCV Transformation (0) | 2021.01.18 |
C++ OpenCV Segmentation and Labelging (0) | 2021.01.11 |
C++ OpenCV 컬러 흑백 이미지 Histogram(히스토그램) (0) | 2021.01.08 |
C++ OpenCV라이브러리 설치 방법 (0) | 2020.12.31 |