如何识别一个图片中的红色像素点并输出每个红色像素点的像素坐标用基于opencv的c++语言实现
以下是基于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向量中。最后,我们输出每个红色像素点的坐标,并在窗口中显示原始图像和红色区域的掩码。
原文地址: https://www.cveoy.top/t/topic/bSzl 著作权归作者所有。请勿转载和采集!