改进图像中Coca-Cola罐识别算法
各位同事,大家好。我正在用OpenCV在C++上编写一个程序,用于识别照片中的Coca-Cola罐。思路很简单:罐子是红色的、圆柱形的,带有白色条纹。我使用颜色过滤(HSV)来提取红色区域,然后找到轮廓并用椭圆拟合。看起来逻辑上没问题,但在真实照片上算法严重失灵。
这是我当前的代码:
```cpp
cv::Mat hsv, mask;
cv::cvtColor(img, hsv, cv::COLOR_BGR2HSV);
cv::inRange(hsv, cv::Scalar(0, 100, 100), cv::Scalar(10, 255, 255), mask);
// 同时添加红色下边界(从160到180)
cv::Mat mask2;
cv::inRange(hsv, cv::Scalar(160, 100, 100), cv::Scalar(180, 255, 255), mask2);
mask = mask | mask2;
std::vector> contours;
cv::findContours(mask, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
for (auto& c : contours) {
if (c.size() > 50) {
cv::RotatedRect ellipse = cv::fitEllipse(c);
// 检查比例