0

私はwindows10でopencv 4.5.2に取り組んでいます。私のコードは色を認識するはずです。色が明らかに赤い20x20の単純な写真をスキャンしているときに、問題に遭遇しました。

ここに画像の説明を入力

次のスニペットを実行すると

#include<opencv2/opencv.hpp>
#include<iostream>
const std::string imgpath = "C:\\Users\\nicola\\Desktop\\c++\\qt\\FaceScanner\\FaceScanner\\images\\";

int main()
{
    cv::Mat origin = cv::imread(imgpath+"square_red.jpg");
    cv::Mat hsv;
    cv::cvtColor(origin, hsv, cv::COLOR_BGR2HSV);
    cv::Scalar color = cv::mean(hsv);
    std::cout << "HSV: " << color[0] << " " << color[1] << " " << color[2] << "\n";
    color = cv::mean(origin);
    std::cout << "BGR: " << color[0] << " " << color[1] << " " << color[2] << "\n";
}

私が得ている出力は

HSV: 88.4 251.532 238.768
BGR: 8.96 3.52 238.768

問題は、hsv(88, 251, 238) が一種の緑であり、bgr(8, 3, 238) が私が期待している赤であるため、この 2 つの色が異なることです。色を処理するには、hsv 色空間で必要です。誰でもこれを理解できますか?前もって感謝します。

4

1 に答える 1