C++怎么在一幅灰度图像中找到一个已知像素值的所有坐标,并把坐标放到vector容器中返回
时间: 2024-04-29 18:24:49 浏览: 9
可以通过遍历整个图像,查找像素值是否和给定的像素值相同,如果相同则将这个像素的坐标加入到vector容器中,最终返回该容器即可。下面是示例代码:
```c++
vector<Point> findPixel(Mat image, uchar pixelValue)
{
vector<Point> coordinates;
for (int i = 0; i < image.rows; i++) {
for (int j = 0; j < image.cols; j++) {
if (image.at<uchar>(i, j) == pixelValue) {
coordinates.push_back(Point(j, i));
}
}
}
return coordinates;
}
```
这个函数接受一个灰度图像和一个像素值,返回一个Point类型的vector,其中存储了图像中所有值为该像素值的坐标。请注意,这只是一个基本的实现,对于大尺寸图像或者需要高效处理的场景,可能需要进行优化。
相关问题
C++怎么在一幅灰度图像中找到一个已知像素值的所有坐标,并把坐标放到vector容器中中返回
您可以使用OpenCV的findNonZero函数来实现这个目标。例如:
```c++
#include <opencv2/opencv.hpp>
#include <vector>
using namespace cv;
using namespace std;
vector<Point> findPixelLocations(Mat image, uchar pixelValue) {
Mat mask = (image == pixelValue); // 创建像素值相等的掩码
vector<Point> locations; // 存储像素值相等的所有坐标
findNonZero(mask, locations); // 找到所有非零坐标
return locations;
}
```
然后你可以将你的图像和像素值作为参数传递给这个函数来找到所需的所有坐标:
```c++
Mat image = imread("grayImage.png", IMREAD_GRAYSCALE);
uchar pixelValue = 128;
vector<Point> locations = findPixelLocations(image, pixelValue);
```
这里我们假定你的灰度图像是来自一个名为"grayImage.png"的PNG文件。
使用C++怎么在一幅灰度图像中找到一个已知像素值的所有坐标,并把坐标放到vector容器中返回
你可以使用双重循环遍历整张图像,对于每一个像素,判断其像素值是否与目标像素值相同,如果相同,则将该像素的坐标放入vector容器中。代码示例如下:
```c++
vector<Point> findPixels(Mat img, int targetValue) {
vector<Point> coordinates;
for (int i = 0; i < img.cols; ++i) {
for (int j = 0; j < img.rows; ++j) {
if (img.at<uchar>(j, i) == targetValue) {
coordinates.push_back(Point(i, j));
}
}
}
return coordinates;
}
```
其中,Mat表示图像矩阵,uchar表示像素值类型为无符号字符型,Point表示坐标,i和j分别表示列和行。