일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- atmega328
- java
- aduino
- sensor
- wpf
- Overloading
- Read
- Unity
- UNO
- memory
- public
- digitalRead
- inheritance
- Barcode
- flutter
- Contour
- SERIAL
- parameter
- APP
- compare
- stream
- mfc
- Binary
- Encapusulation
- Pointer
- length
- preprocessing
- Class
- Android
- file access
- Today
- Total
폴크(FOLC)
머신 비전 알고리즘 - OpenCV - 이미지처리11 본문
# 디지털 이미지 처리
# 이미지의 상태 정보에서 일반적인 정보를 생성한다.
> 추출된 정보를 일반화한다.
# 이미지 처리 - OpenCV 4.5.3 으로 테스트
# 이미지의 상태 정보에서 일반적인 정보를 생성
> Points : 입력, line_result : 결과, param : 수치형 매개변수(0 일때 최적화 자동 선택)
> reps : 정확도(거리), aeps : 정확도(각도), dp : 해상도, param1 : canny 최대값, param2 : 최소 반지름
# cv::fitLine
> vector<cv::Point2f> Points;
> cv::Vec4f line_result;
> int distType = cv::DIST_L2;
> double param = 0, double reps = 0.01, double aeps = 0.01;
> cv::fitLine(cv::Mat(Points), line_result, distType, param, reps, aeps);
> int x0 = (int)(line_result[2]);
> int y0 = (int)(line_result[3]);
> int x1 = x0 - (int)(200.f * line_result[0]); // 200 길이를 갖는 벡터 추가 X 방향
> int y1 = y0 - (int)(200.f * line_result[1]); // 200 길이를 갖는 벡터 추가 Y 방향
# cv::HoughLines
> double thresh1 = 128.0, thresh2 = 228.0, max_val = 255.0;
> int type = cv::THRESH_BINARY;
> cv::threshold(srcImage, dstImage, thresh1, max_val, type);
> cv::Mat dstcannyImage;
> int L2gradient = false;
> cv::Canny(srcImage, dstcannyImage, thresh1, thresh2, L2gradient);
> double rho = 1.0, double theta = CV_PI / 180.0, int threshold = 150,
> double srn = 0.0, double stn = 0.0,
> double min_theta = 0.0, double max_theta = CV_PI;
> vector<cv::Vec2f> line_result;
> cv::HoughLines(dstcannyImage, line_result, rho, theta, threshold, srn, stn, min_theta, max_theta);
# cv::HoughLinesP
> double minLineLength = 0.0, maxLineGap = 0.0;
> cv::HoughLinesP(dstcannyImage, line_result, rho, theta, threshold, minLineLength, maxLineGap);
# cv::fitEllipse
> cv::RotatedRect result1 = cv::fitEllipse(cv::Mat(Points));
> cv::RotatedRect result2 = cv::fitEllipseAMS(cv::Mat(Points));
> cv::RotatedRect result3 = cv::fitEllipseDirect(cv::Mat(Points));
> cv::RotatedRect 안에 BoundingBox, Center PointXY, SizeXY, Angle 값이 존재
# cv::HoughCircles
> int method = cv::HOUGH_GRADIENT, int minRadius = 0, int maxRadius = 0;
> double dp = 1.0, double minDist = 100, double param1 = 228.0, double param2 = 100;
> cv::HoughCircles(cv::Mat(Points), line_result, method, dp, minDist, param1, param2, minRadius, maxRadius);
'머신 비전 > 머신 비전 알고리즘 테크닉 CPP' 카테고리의 다른 글
머신 비전 알고리즘 - OpenCV - 이미지처리13 (0) | 2021.07.27 |
---|---|
머신 비전 알고리즘 - OpenCV - 이미지처리12 (0) | 2021.07.27 |
머신 비전 알고리즘 - OpenCV - 이미지처리10 (0) | 2021.07.25 |
머신 비전 알고리즘 - OpenCV - 이미지처리9 (0) | 2021.07.25 |
머신 비전 알고리즘 - OpenCV - 이미지처리8 (0) | 2021.07.25 |