以下是基于 OpenCV 的 C++ 语言实现红色像素点识别和输出像素坐标的代码:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    Mat image = imread('test.jpg'); // 读取图片
    if (image.empty())
    {
        cout << 'Could not open or find the image' << endl;
        return -1;
    }

    Mat hsv;
    cvtColor(image, hsv, COLOR_BGR2HSV); // 转换为HSV颜色空间

    // 定义红色范围
    Scalar lower_red = Scalar(0, 100, 100);
    Scalar upper_red = Scalar(10, 255, 255);
    Scalar lower_red2 = Scalar(160, 100, 100);
    Scalar upper_red2 = Scalar(179, 255, 255);

    Mat mask1, mask2, mask;
    inRange(hsv, lower_red, upper_red, mask1); // 获取红色区域掩码
    inRange(hsv, lower_red2, upper_red2, mask2);
    bitwise_or(mask1, mask2, mask);

    vector<Point> red_pixels; // 存储红色像素点坐标
    for (int i = 0; i < mask.rows; i++)
    {
        for (int j = 0; j < mask.cols; j++)
        {
            if (mask.at<uchar>(i, j) > 0) // 判断是否为红色像素点
            {
                red_pixels.push_back(Point(j, i)); // 存储红色像素点坐标
            }
        }
    }

    // 输出红色像素点坐标
    for (int i = 0; i < red_pixels.size(); i++)
    {
        cout << 'Red pixel at (' << red_pixels[i].x << ', ' << red_pixels[i].y << ')' << endl;
    }

    imshow('Image', image);
    imshow('Mask', mask);
    waitKey(0);
    return 0;
}

在代码中,我们首先读取图片,然后将其转换为 HSV 颜色空间。然后,我们定义红色的范围,并使用 inRange() 函数获取红色区域的掩码。接着,我们遍历掩码中的每个像素点,如果该像素点为红色像素点,则将其坐标存储在 red_pixels 向量中。最后,我们输出每个红色像素点的坐标,并在窗口中显示原始图像和红色区域的掩码。

C++ OpenCV 实现图片红色像素点识别及坐标输出

原文地址: https://www.cveoy.top/t/topic/jxLv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录