c++opencv将灰度图中的像素点大于等于100的值改为255,小于100的像素点值不变,然后输出图像
时间: 2024-02-12 18:04:10 浏览: 43
可以使用OpenCV中的cv::threshold函数来实现这个功能。下面是一个示例代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 读入灰度图
Mat gray_img = imread("gray_img.jpg", IMREAD_GRAYSCALE);
// 对图像进行二值化处理
Mat binary_img;
threshold(gray_img, binary_img, 100, 255, THRESH_BINARY);
// 显示二值化后的图像
imshow("Binary Image", binary_img);
waitKey(0);
// 保存二值化后的图像
imwrite("binary_img.jpg", binary_img);
return 0;
}
```
在这个示例代码中,首先使用imread函数读入灰度图像,然后使用threshold函数对图像进行二值化处理。其中,第一个参数是输入图像,第二个参数是输出图像,第三个参数是阈值,大于等于这个阈值的像素点会被设置为第四个参数的值,小于这个阈值的像素点会被设置为0。最后,使用imshow函数显示二值化后的图像,并使用imwrite函数保存二值化后的图像。
相关问题
c++,改变从opencv读取的灰度图像中某个像素点的值
要在C++中改变从OpenCV读取的灰度图像中某个像素点的值,您可以使用以下代码:
```cpp
#include <opencv2/opencv.hpp>
int main() {
// 读取图像
cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);
// 修改像素点值
int row = 100; // 像素点的行坐标
int col = 200; // 像素点的列坐标
// 修改像素点为新的灰度值
image.at<uchar>(row, col) = 128;
// 保存修改后的图像
cv::imwrite("modified_image.jpg", image);
return 0;
}
```
在上面的代码中,我们使用`cv::imread`函数读取灰度图像,并将其存储在`cv::Mat`对象中。然后,通过使用`at<uchar>(row, col)`来访问特定像素点。在这个例子中,我们将特定像素点的值修改为新的灰度值128。最后,我们使用`cv::imwrite`函数保存修改后的图像。
请注意,上述代码假设图像是灰度图像。如果您读取的是彩色图像,则需要使用`cv::Mat_<cv::Vec3b>`对象的对应通道版本(如`image.at<cv::Vec3b>(row, col)[0]`)进行访问和修改。
C++opencv对图像中的像素灰度值进行遍历,将大于20的灰度值替换成0
可以使用以下代码对图像进行遍历,并将大于20的灰度值替换为0:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat image = imread("image.jpg", IMREAD_GRAYSCALE); // 读取灰度图像
int rows = image.rows;
int cols = image.cols;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (image.at<uchar>(i, j) > 20) { // 判断灰度值是否大于20
image.at<uchar>(i, j) = 0; // 将大于20的灰度值替换为0
}
}
}
imshow("Processed Image", image); // 显示处理后的图像
waitKey(0);
return 0;
}
```
其中,`image.at<uchar>(i, j)`表示获取图像中第i行,第j列像素点的灰度值。如果灰度值大于20,则将该像素点的灰度值设为0。最后将处理后的图像显示出来即可。