c++ - 提取给定坐标内的像素

标签 c++ opencv

我是图像处理和开发的新手。我有图像的像素坐标。通过连接每个坐标可以得到一个三角形。我想提取给定坐标像素内的像素(三角形内的像素)

坐标如下。

1(x,y) -> (146 , 548)
2(x,y) -> (155, 548)
3(x,y) -> (149.6 , 558.1)

我如何获取上述坐标的入站像素。任何帮助表示赞赏。谢谢。

最佳答案

您应该在图像上应用蒙版。

示例代码:

首先你应该加载你的图像:

//load default image
Mat image = cv::imread("/home/fabio/code/lena.jpg", cv::IMREAD_GRAYSCALE);

default image loaded

然后为您的图像创建一个蒙版并将三角形点应用于蒙版。

//mask image definition
cv::Mat mask = cv::Mat::zeros(image.size(), image.type());

//triangle definition (example points)
vector<Point> points;
points.push_back( Point(100,70));
points.push_back( Point(60,150));
points.push_back( Point(190,120));

//apply triangle to mask
fillConvexPoly( mask, points, Scalar( 255 ));

之后你的面具看起来像这样:

triangle mask image

最后创建最终图像,将蒙版应用于原始图像:

//final image definition
cv::Mat finalImage = cv::Mat::zeros(image.size(), image.type());

image.copyTo(finalImage, mask);

结果:

result

这就是你要找的吗?

关于c++ - 提取给定坐标内的像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41074927/

相关文章:

python - Cv2 findChessboardCorners 无法找到角点

opencv - 如何在整个视频中保存Farnebacks方法的流量估计?

c++ - 在 OpenCV 中循环遍历 16 位 Mat 像素的有效方法

c++ - 在 Borland C++ 上使用#pragma pack 和#define

c++ - 我可以将 main() 中的代码替换为全局对象的构造函数吗?

c++ - 使用 Boost.Serialization 进行序列化

c++ - OpenCV中是否有任何函数可以找到两个cv::Rect的交集、并集和补集

c++ - 在视频opencv中搜索对象

c++ - 禁止在 C++ 中复制类

c++ - 将 float 转换为 4 uint8_t