C++opencv-像素操作
2023-09-27 14:28:42 时间
在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; }
相关文章
- C++ opencv高速样例学习——读图显示
- OpenCV对图像进行尺寸变换
- 将OpenCV函数findContours()得到的每一个轮廓单独绘制并保存为图片文件的Python代码
- 用C++_OpenCV生成一幅灰度值为0~255的测试图像(测试矩阵)
- Python-OpenCV难道比C++_OpenCV快?以调用Canny边缘检测函数为例
- Python-OpenCV下的窗口鼠标事件交互操作(实现鼠标移动轨迹的绘制)
- 快速获取OpenCV库(Lib)文件下的所有文件的目录名~
- OpenCV环境下对图像进行灰度拉伸变换的C++源码【设置低阈值和高阈值、通过映射表实现】
- 利用OpenCV的函数Rect()提取感兴趣区域的C++代码
- 实现图像旋转的MATLAB源码和OpenCV下的C/C++源码
- MATLAB、C++、OpenCV、Python、Python-Numpy近似值(取整)求取函数总结【round()、ceil()、floor()、fix()】
- OpenCV 20 年,首款开源软硬一体的 OAK 套件来了
- C++的Opencv动态库遇到的问题
- c#和c++的opencv位图数据参数互换问题解决方法
- C#调用C++(opencv)中图片数据传递的问题
- OpenCV中的cv::String和CString互相转换
- 关于QT下配置OpenCV3.4.0后出现 error: undefined reference to ‘cv::xxx‘的问题及解决方案,直接使用编译好的opencv库
- 使用opencv库编译代码并运行
- OpenCV isContinuous()连续存储的问题
- 使用卷积神经网络和 OpenCV 实时求解数独(教程含源码)
- opengl学习笔记(四):openCV读入图片,openGL实现纹理贴图
- VS集成opencv编译C++项目遇到的问题
- opencv是什么
- (原)windows8.1上使用opencv for python
- (原+转)Eclipse中Android调用OpenCv