1.图像是由像素组成的,所以修改了像素就可以实现图像的改变。
2先看灰度图像(单通道):
*****2.获取灰度图像的像素值使用: int gray = gray_src.at<uchar>(row, col);
*****3.修改灰度图像的像素值使用:gray_src.at<uchar>(row, col) = 255 - gray;//对每一个像素取反
*****源代码,对灰度图像像素值全部取反
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #include<opencv2\opencv.hpp> #include<iostream> using namespace std; using namespace cv; /*图像操作*/ int main( int argc, char **argv) { Mat src = imread( "E:\\vsprom\\learn02\\nv1.jpg" ); if (src.empty()) { cout << "can not load imagefile...." << endl; return -1; } namedWindow( "in image win" , CV_WINDOW_AUTOSIZE); imshow( "in image win" , src); /*将一个RGB图像转为GRAY图像*/ Mat gray_src; cvtColor(src,gray_src,CV_BGR2GRAY); int height = gray_src.rows; int width = gray_src.cols; for ( int row = 0; row < height; row++) { for ( int col = 0; col < width; col++) { int gray = gray_src.at<uchar>(row, col); /*读取一个GRAY像素点的像素值(CV_8UC1)*/ gray_src.at<uchar>(row, col) = 255 - gray; //对每一个像素取反 } } namedWindow( "gray image win" , CV_WINDOW_AUTOSIZE); imshow( "gray image win" , gray_src); waitKey(0); return 0; } |
效果图:
3.RGB图像的像素操作
读像素值
int b = src.at<Vec3b>(row, col)[0];//第一个通道
int g = src.at<Vec3b>(row, col)[1];//第二个通道
int r = src.at<Vec3b>(row, col)[2];//第三个通道
修改像素值
dst.at<Vec3b>(row, col)[0] = 255 - b;
dst.at<Vec3b>(row, col)[1] = 255 - g;
dst.at<Vec3b>(row, col)[2] = 255 - r;
源代码实例:
/*获取RGB的像素值*/ Mat dst; dst.create(src.size(), src.type()); int height = dst.rows; int width = dst.cols; int cn = src.channels();//通道数 for (int row = 0; row < height; row++) { for (int col = 0; col < width; col++) { if (cn == 1) { int gray = dst.at<uchar>(row, col);/*读取一个GRAY像素点的像素值(CV_8UC1)*/ dst.at<uchar>(row, col) = 255 - gray;//对每一个像素取反 } else if(cn==3) { int b = src.at<Vec3b>(row, col)[0];//第一个通道 int g = src.at<Vec3b>(row, col)[1];//第二个通道 int r = src.at<Vec3b>(row, col)[2];//第三个通道 dst.at<Vec3b>(row, col)[0] = 255 - b; dst.at<Vec3b>(row, col)[1] = 255 - g; dst.at<Vec3b>(row, col)[2] = 255 - r; } } } namedWindow("rgb image win", CV_WINDOW_AUTOSIZE); imshow("rgb image win", dst);
产看输出效果图
需要程序源码的可以加我微信x241602私聊。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?