C++opencv-像素操作
在Windows下,RGB存储的顺序为BGR
方法一
#include <opencv2/opencv.hpp> int main() { cv::Mat img = cv::imread("./tu/马.jpg", cv::IMREAD_UNCHANGED); size_t rr=200, c=100;//rr 行号,c 列号 cv::Vec3b& bgr = img.at<cv::Vec3b>(rr, c); //返回指定行列的像素 /* 图像类型: cv::Vec3b 三通道彩色(8位) unsigned char 单通道灰度 unsigned short 16位灰度 float 32位浮点型 cv::Vec2f 双通道32位 */ int b = int(bgr[0]);//提取B通道的数据 //bgr[0] 的数据类型是unsigned char //bgr[0]=0; //修改B通道的数据 int g = int(bgr[1]); //提取G通道的数据 int r = int(bgr[2]); //提取R通道的数据 std::cout << typeid(bgr[0]).name() << b << "," << g << "," << r << std::endl; }
方法二:指针法
#include <opencv2/opencv.hpp> int main() { cv::Mat img = cv::imread("./tu/马.jpg", cv::IMREAD_UNCHANGED); size_t r=200, c=100;//rr 行号,c 列号 int x = img.step[0];//返回图像一行的字节数 //x=图像的宽*通道数 unsigned char* pRow = img.data + r * img.step[0];//计算图像指定行行首指针 //r 行号 //img.data 返回图像的首地址 unsigned char rr; rr = pRow[3 * c + 2]; //返回r行c列像素的R通道的数据 x = int(rr); //pRow[3 * c + 2]=0; //修改r行c列像素的R通道的数据 std::cout << x<< std::endl; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
2019-09-03 qt5---QMainWindow
2019-09-03 python--队列