| 136 | } |
| 137 | |
| 138 | std::vector<cv::Rect> MatchObject(QImage &img, cv::CascadeClassifier &cascade, |
| 139 | double scaleFactor, int minNeighbors, |
| 140 | const cv::Size &minSize, |
| 141 | const cv::Size &maxSize) |
| 142 | { |
| 143 | if (img.isNull() || cascade.empty()) { |
| 144 | return {}; |
| 145 | } |
| 146 | |
| 147 | auto image = QImageToMat(img); |
| 148 | cv::Mat frameGray; |
| 149 | cv::cvtColor(image, frameGray, cv::COLOR_RGBA2GRAY); |
| 150 | cv::equalizeHist(frameGray, frameGray); |
| 151 | std::vector<cv::Rect> objects; |
| 152 | try { |
| 153 | cascade.detectMultiScale(frameGray, objects, scaleFactor, |
| 154 | minNeighbors, 0, minSize, maxSize); |
| 155 | } catch (const std::exception &e) { |
| 156 | vblog(LOG_INFO, "detectMultiScale failed: %s", e.what()); |
| 157 | } |
| 158 | return objects; |
| 159 | } |
| 160 | |
| 161 | uchar GetAvgBrightness(QImage &img) |
| 162 | { |
no test coverage detected