76 lines
1.6 KiB
C++
76 lines
1.6 KiB
C++
#include <iostream>
|
|
#include <vector>
|
|
#include <opencv2/core.hpp>
|
|
#include <opencv2/highgui.hpp>
|
|
#include <opencv2/imgproc.hpp>
|
|
|
|
using namespace std;
|
|
using namespace cv;
|
|
|
|
void kordetektalo1(const Mat& gray, vector<Vec3f>& circles) {
|
|
|
|
int cannyTh = 60;
|
|
int minPoints = 30;
|
|
int minR = 22; //K1: allitsd be
|
|
int maxR = 26; //K1: allitsd be
|
|
int d = 2;
|
|
int minDist = 10;
|
|
|
|
cv::HoughCircles(gray, circles, cv::HOUGH_GRADIENT, d, minDist, cannyTh, minPoints, minR, maxR);
|
|
}
|
|
|
|
int main(){
|
|
Mat img = imread("past.jpg", IMREAD_COLOR);
|
|
if(img.empty()){
|
|
return 1;
|
|
}
|
|
|
|
// 1. Konvertáld szürkeskálássá az img képet
|
|
Mat gray;
|
|
cvtColor(img, gray, COLOR_BGR2GRAY);
|
|
imwrite("gray_stud.png", gray);
|
|
|
|
|
|
vector<Vec3f> circles;
|
|
kordetektalo1(gray, circles);
|
|
|
|
// 2. Végezz mediánszűrés 11x11-es ablakmérettel.
|
|
Mat mb2;
|
|
medianBlur(img, mb2, 11);
|
|
imwrite("filtered_stud.png", mb2);
|
|
|
|
// 3. rajzold ki a detektált köröket az eredeti képre
|
|
// sugár: 6, szín: tiszta piros, vonalvastagság: FILLED
|
|
int radius = 6;
|
|
|
|
for (auto c : circles) {
|
|
int x = c[0];
|
|
int y = c[1];
|
|
circle(img, Point(x,y), radius, Scalar(0, 100, 100), 2, cv::LineTypes::FILLED);
|
|
}
|
|
|
|
imwrite("result_stud.png", img);
|
|
|
|
|
|
// 4. Határozd meg a körök középpontja alá eső pixelek
|
|
// KÉK komponensének átlagát a SZŰRT képen.
|
|
double mean_v = 0;
|
|
vector<Mat> chs;
|
|
split(circles, chs); //bgr
|
|
int count = 0;
|
|
for(auto c : circles){
|
|
int x = c[0];
|
|
int y = c[1];
|
|
mean_v += img.at<uchar>(y,x);
|
|
}
|
|
mean_v /= circles.size();
|
|
|
|
|
|
// Jelenitsd meg az atlagot a standard kimeneten.
|
|
// cout << mean_v << endl;
|
|
|
|
waitKey();
|
|
|
|
return 0;
|
|
}
|