C++怎么在一幅灰度图像中找到一个已知像素值的所有坐标,并把坐标放到vector容器中返回
时间: 2024-05-03 16:20:47 浏览: 82
可以使用双重循环扫描整幅图像,找到与目标像素值相同的像素点,并将其坐标加入到vector容器中返回。具体代码示例如下:
```
vector<pair<int, int>> findPixel(Mat grayImg, int pixelValue) {
vector<pair<int, int>> pixelCoords;
for (int i = 0; i < grayImg.rows; i++) {
for (int j = 0; j < grayImg.cols; j++) {
if (grayImg.at<uchar>(i, j) == pixelValue) { // 判断像素值是否相同
pixelCoords.push_back(make_pair(i, j)); // 将坐标加入到vector容器中
}
}
}
return pixelCoords;
}
```
其中,grayImg表示输入的灰度图像,pixelValue表示待查找的像素值,返回一个存储坐标的vector容器。
相关问题
使用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分别表示列和行。
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文件。
阅读全文