c++opencv获取point点的像素值
时间: 2023-09-10 07:05:15 浏览: 77
要获取一个点的像素值,需要使用OpenCV中的函数cv::Mat::at()。以下是一个获取图像中某个点像素值的示例代码:
```
cv::Mat img = cv::imread("image.jpg"); // 读取图像
cv::Point pt(100, 100); // 要获取像素值的点坐标
cv::Vec3b pixel = img.at<cv::Vec3b>(pt); // 获取像素值
```
在这个示例代码中,cv::imread()函数用于读取图像文件,cv::Point()用于创建一个点对象,cv::Vec3b()用于表示一个三通道的像素值。最后,使用cv::Mat::at()函数获取指定点的像素值,返回的是一个cv::Vec3b类型的像素值。
相关问题
c++opencv判断轮廓内像素点对比度是否大于阈值
可以按照以下步骤实现:
1. 对轮廓进行填充,生成一个二值图像。
2. 对二值图像进行腐蚀操作,使轮廓内像素点“膨胀”一定程度,避免对比度过低的像素点被误判。
3. 对原始图像进行灰度化。
4. 遍历轮廓内的像素点,计算其像素值与轮廓周围像素值的对比度,判断是否大于阈值。
5. 根据判断结果进行相应的处理。
以下是C++代码示例:
```
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat image = imread("test.jpg"); // 读入原始图像
Mat gray; // 灰度图像
cvtColor(image, gray, COLOR_BGR2GRAY); // 转换为灰度图像
// 提取轮廓
vector<vector<Point>> contours;
findContours(gray, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
// 遍历每个轮廓
for (int i = 0; i < contours.size(); i++)
{
// 对轮廓进行填充,生成一个二值图像
Mat mask = Mat::zeros(gray.size(), CV_8UC1);
drawContours(mask, contours, i, Scalar(255), FILLED);
// 对二值图像进行腐蚀操作
Mat kernel = getStructuringElement(MORPH_ELLIPSE, Size(5, 5));
erode(mask, mask, kernel);
// 遍历轮廓内的像素点
for (int j = 0; j < contours[i].size(); j++)
{
Point pt = contours[i][j];
// 计算像素点的对比度
double contrast = 0;
for (int k = -1; k <= 1; k++)
{
for (int l = -1; l <= 1; l++)
{
int x = pt.x + k;
int y = pt.y + l;
if (x >= 0 && x < gray.cols && y >= 0 && y < gray.rows && mask.at<uchar>(y, x) == 255)
{
double diff = abs(gray.at<uchar>(pt) - gray.at<uchar>(y, x));
contrast += diff;
}
}
}
contrast /= 9;
// 判断对比度是否大于阈值
double threshold = 20; // 阈值
if (contrast > threshold)
{
// 对比度大于阈值,进行相应的处理
// ...
}
}
}
return 0;
}
```
C++的opencv 怎么拿到一个point点的像素值
你可以使用OpenCV中的函数`cv::Mat::at`来获取一个点的像素值。假设你有一个名为`image`的图像,你可以通过以下方式获取`Point(x,y)`处的像素值:
```
cv::Mat image = cv::imread("image.png");
cv::Vec3b pixel = image.at<cv::Vec3b>(cv::Point(x, y));
```
这将返回一个3通道的向量,其中包含`Point(x,y)`处的BGR像素值。如果你只对灰度图像感兴趣,你可以使用以下代码:
```
cv::Mat image = cv::imread("image.png", cv::IMREAD_GRAYSCALE);
uchar pixel = image.at<uchar>(cv::Point(x, y));
```
这将返回`Point(x,y)`处的灰度像素值。
阅读全文