C++ 和 OpenCV 图像像素操作:完整案例代码和讲解
C++ 和 OpenCV 中的像素操作包括以下几种:
-
读取和显示图像像素。
-
访问和修改像素值。
-
图像二值化。
-
图像灰度化。
-
图像反转。
-
图像加噪。
-
图像平滑滤波。
-
图像边缘检测。
以下是一个完整的 C++ 和 OpenCV 图像像素操作案例代码:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
// 读取图像
Mat image = imread('lena.jpg');
// 显示图像
namedWindow('Original Image', WINDOW_NORMAL);
imshow('Original Image', image);
// 访问和修改像素值
for (int i = 0; i < image.rows; i++)
{
for (int j = 0; j < image.cols; j++)
{
Vec3b pixel = image.at<Vec3b>(i, j);
pixel[0] = 255 - pixel[0];
pixel[1] = 255 - pixel[1];
pixel[2] = 255 - pixel[2];
image.at<Vec3b>(i, j) = pixel;
}
}
// 显示修改后的图像
namedWindow('Inverted Image', WINDOW_NORMAL);
imshow('Inverted Image', image);
// 图像灰度化
Mat grayImage;
cvtColor(image, grayImage, COLOR_BGR2GRAY);
// 显示灰度化后的图像
namedWindow('Gray Image', WINDOW_NORMAL);
imshow('Gray Image', grayImage);
// 图像二值化
Mat binaryImage;
threshold(grayImage, binaryImage, 100, 255, THRESH_BINARY);
// 显示二值化后的图像
namedWindow('Binary Image', WINDOW_NORMAL);
imshow('Binary Image', binaryImage);
// 高斯滤波
Mat blurImage;
GaussianBlur(image, blurImage, Size(5, 5), 0, 0);
// 显示高斯滤波后的图像
namedWindow('Blurred Image', WINDOW_NORMAL);
imshow('Blurred Image', blurImage);
// 边缘检测
Mat edges;
Canny(image, edges, 100, 200);
// 显示边缘检测后的图像
namedWindow('Edges Image', WINDOW_NORMAL);
imshow('Edges Image', edges);
waitKey(0);
return 0;
}
原文地址: https://www.cveoy.top/t/topic/j8za 著作权归作者所有。请勿转载和采集!