https://95mkr.tistory.com/entry/OPENCV6?category=750764
앞선 두 과정을 끝냈다면 이제는 있는 코드를 제대로 썼다면 오류는 안 나기 때문에 7 과정을 이번에 다 쓰고
나중에 이론적인 부분들을 잘 이해해서 다시 쓰도록 할 것이며 그럼에도 나온 몇가지 오류들을 정리하겠다.
모든 과정은 동일하게 진행된다.
우선 workspace폴더를 만들고 그 안에 대표 프로젝트 폴더를 만든다(ex: filtering).
그 후 그 폴더 내부에 src폴더를 만들고 src폴더에서 gedit Blur.cpp를
Blur폴더에서 gedit CMakeLists.txt 파일을 만들고 cmake. 한 이후에 make를 하고 나온 실행파일을./Blur로 실행시킨다.
같은 방식으로 src폴더에 Blur만이 아니라 다른 Bilateral Filter 같은 소스파일을 만들고 CMakeLists.txt 만 위의 사진처럼 추가하고
cmake .
make
하면 된다. 여기서 주의할 점은
1. "CMakeLists.txt" 파일은 파일 이름이 한 글자도 틀리면 안 된다는 점
2. 참고사이트에서는 가끔
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include <iostream>
이런 식으로 ""을 썼는데 이건 그 폴더 내에 있는 헤더를 쓰겠다는 의미이므로 우리는 하면 안 되고 저걸 한번 하고 실행하면 다시 <>로 수정한다 해도 안되니 삭제하고 처음부터 진행할 것 (이유는 나중에 알아내야 함)
이다.
Bilateral Filter
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
int main(int argc, char** argv){
cv::Mat src = cv::imread("road.jpg");
if(src.empty()) return -1;
cv::Mat bilateral;
cv::bilateralFilter(src, bilateral, 5, 50, 50);
cv::Mat bilateral1;
cv::bilateralFilter(src, bilateral1, 5, 100, 100);
cv::Mat bilateral2;
cv::bilateralFilter(src, bilateral2, 5, 150, 150);
cv::imshow("original", src);
cv::imshow("bilateral",bilateral);
cv::imshow("bilateral1",bilateral1);
cv::imshow("bilateral2",bilateral2);
cv::waitKey(0);
return 0;
}
Blur
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
int main(int argc, char** argv){
cv::Mat src = cv::imread("road.jpg");
if(src.empty()) return -1;
cv::Mat blur;
cv::blur(src, blur, cv::Size(3,3));
cv::Mat blur1;
cv::blur(src, blur1, cv::Size(5,5));
cv::Mat blur2;
cv::blur(src, blur2, cv::Size(7,7));
cv::imshow("original", src);
cv::imshow("blur",blur);
cv::imshow("blur1", blur1);
cv::imshow("blur2",blur2);
cv::waitKey(0);
return 0;
}
Median Blur
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
int main(int argc, char** argv){
cv::Mat src = cv::imread("road.jpg");
if(src.empty()) return -1;
cv::Mat median;
cv::medianBlur(src, median, 3);
cv::Mat median1;
cv::medianBlur(src, median1, 5);
cv::Mat median2;
cv::medianBlur(src, median2, 7);
cv::imshow("original", src);
cv::imshow("median", median);
cv::imshow("median1", median1);
cv::imshow("median2", median2);
cv::waitKey(0);
return 0;
}
Gaussian Blur
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
int main(int argc, char** argv){
cv::Mat src = cv::imread("road.jpg");
if(src.empty()) return -1;
cv::Mat gaussian;
cv::GaussianBlur(src, gaussian, cv::Size(3,3), 10);
cv::Mat gaussian1;
cv::GaussianBlur(src, gaussian1, cv::Size(5,5), 10);
cv::Mat gaussian2;
cv::GaussianBlur(src, gaussian2, cv::Size(7,7), 10);
cv::imshow("original", src);
cv::imshow("gaussian", gaussian);
cv::imshow("gaussian1", gaussian1);
cv::imshow("gaussian2", gaussian2);
cv::waitKey(0);
return 0;
}
Mix
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
int main(int argc, char** argv){
cv::Mat src = cv::imread("road.jpg");
if(src.empty()) return -1;
cv::Mat bilateral;
cv::bilateralFilter(src, bilateral, 5, 50, 50);
cv::Mat blur;
cv::blur(src, blur, cv::Size(3,3));
cv::Mat median;
cv::medianBlur(src, median, 3);
int size = 3;
cv::Mat gaussian;
cv::GaussianBlur(src, gaussian, cv::Size(size,size), 100);
cv::imshow("bilateral", bilateral);
cv::imshow("blur", blur);
cv::imshow("median", median);
cv::imshow("gaussian", gaussian);
cv::waitKey(0);
return 0;
}
hsv.cpp
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
int main(){
int width = 600, height = 400;
cv::Mat img, hsv;
img = cv::imread("road2.jpg", cv::IMREAD_COLOR);
cv::cvtColor(img, hsv, cv::COLOR_RGB2HSV);
if(img.empty()){
std::cout << "No Image" << std::endl;
return -1;
}
cv::namedWindow("ORIGINAL IMAGE", cv::WINDOW_NORMAL);
cv::resizeWindow("ORIGINAL IMAGE", width, height);
cv::imshow("ORIGINAL IMAGE", img);
cv::namedWindow("HSV IMAGE", cv::WINDOW_NORMAL);
cv::resizeWindow("HSV IMAGE", width, height);
cv::imshow("HSV IMAGE", hsv);
cv::waitKey(0);
}
※ CMakeLists.txt
cmake_minimum_required(VERSION 2.9)
project(colorModel)
find_package(OpenCV REQUIRED)
add_executable(${PROJECT_NAME} src/hsv.cpp)
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
cmake .
make
./colorModel
※ ROI(Region Of Interest)
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
int main(){
cv::Mat img, ROI;
img = cv::imread("road2.jpg", cv::IMREAD_COLOR);
cv::resize(img, img, cv::Size(600,480));
if(img.empty()){
std::cout << "No Image" << std::endl;
return -1;
}
ROI = img(cv::Rect(0,250,600,230));
cv::namedWindow("ORIGINAL IMAGE", cv::WINDOW_NORMAL);
cv::resizeWindow("ORIGINAL IMAGE",600, 480);
cv::imshow("ORIGINAL IMAGE", ROI);
cv::waitKey(0);
}
※ 수정한 코드
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
int main(){
cv::Mat img, HSV, ROI;
img = cv::imread("road2.jpg", cv::IMREAD_COLOR);
cv::resize(img, img, cv::Size(600,480));
if(img.empty()){
std::cout << "No Image" << std::endl;
return -1;
}
ROI = img(cv::Rect(0,250,600,230));
cvtColor(ROI,HSV,cv::COLOR_RGB2HSV);
cv::Scalar lower_white = cv::Scalar(0,0,200);
cv::Scalar upper_white = cv::Scalar(180,255,255);
cv::inRange(HSV, lower_white, upper_white, HSV);
cv::imshow("ORIGINAL IMAGE", ROI);
cv::imshow("HSV IMAGE", HSV);
cv::waitKey(0);
}
Sobel Mask
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include <iostream>
int main(){
cv::Mat src;
int kernel_size = 3;
int scale = 1;
int delta = 0;
int ddepth = CV_32F;
src = cv::imread("road2.jpg", cv::IMREAD_COLOR);
cv::resize(src, src, cv::Size(src.cols/2, src.rows/2));
if(src.empty()){
std::cout << "Can't Open Image" << std::endl;
return -1;
}
cv::Mat blur, gray;
cv::bilateralFilter(src, blur, kernel_size, 100, 100);
cv::cvtColor(blur, gray, cv::COLOR_BGR2GRAY);
// Sobel Mask
cv::Mat sobel_x, sobel_y, scharr_x, scharr_y;
cv::Sobel(gray, sobel_x, ddepth, 1, 0);
cv::Sobel(gray, sobel_y, ddepth, 0, 1);
// Scharr Filter
cv::Sobel(gray, scharr_x, cv::FILTER_SCHARR, 1, 0);
cv::Sobel(gray, scharr_y, cv::FILTER_SCHARR, 0, 1);
cv::imshow("sobel x", sobel_x);
cv::imshow("sobel y", sobel_y);
cv::imshow("scharr x", scharr_x);
cv::imshow("scharr y", scharr_y);
cv::waitKey(0);
return 0;
}
Laplacian
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include <iostream>
int main(){
cv::Mat src;
int kernel_size = 3;
int scale = 1;
int delta = 0;
int ddepth = CV_16S;
src = cv::imread("road2.jpg", cv::IMREAD_COLOR);
cv::resize(src, src, cv::Size(src.cols/2, src.rows/2));
if(src.empty()){
std::cout << "Can't Open Image" << std::endl;
return -1;
}
cv::Mat blur, gray, dst, abs_dst;
cv::GaussianBlur(src, blur, cv::Size(3,3), 10);
cv::cvtColor(blur, gray, cv::COLOR_BGR2GRAY);
cv::Mat dst, abs_dst;
cv::Laplacian(gray, dst, ddepth, kernel_size, scale, delta, cv::BORDER_DEFAULT);
cv::convertScaleAbs(dst, abs_dst);
cv::imshow("reult", abs_dst);
cv::waitKey(0);
return 0;
}
Canny
#include <opencv2/imgproc.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
int main(){
cv::Mat src;
int kernel_size = 3;
int ddepth = CV_16S;
int low_threshold = 150;
int high_threshold = low_threshold * 2;
src = cv::imread("road2.jpg", cv::IMREAD_COLOR);
cv::resize(src, src, cv::Size(src.cols/2, src.rows/2));
if(src.empty()){
std::cout << "Can't Open Image" << std::endl;
return -1;
}
cv::Mat blur, gray;
cv::bilateralFilter(src, blur, kernel_size, 100, 100);
cv::cvtColor(blur, gray, cv::COLOR_BGR2GRAY);
cv::Mat scharr_x, scharr_y;
cv::Scharr(gray,scharr_x,ddepth,1,0);
cv::Scharr(gray,scharr_y,ddepth,0,1);
cv::Mat scharrToCanny, grayToCanny;
cv::Canny(scharr_x, scharr_y, scharrToCanny, 500, 1000);
cv::Canny(gray, grayToCanny, low_threshold, high_threshold);
cv::imshow("Canny", scharrToCanny);
cv::imshow("gray canny",grayToCanny);
cv::waitKey(0);
return 0;
}
'embedded > opencv' 카테고리의 다른 글
+. 윈도우에서 opencv 설치하고 라이브러리 추가하기 (0) | 2021.09.08 |
---|---|
5. 이미지 프로세싱(3) (0) | 2021.09.08 |
4. 이미지 프로세싱(2) (0) | 2021.09.08 |
2. opencv 실시간 촬영 (0) | 2021.09.03 |
1. opencv로 이미지 출력 (0) | 2021.09.03 |