opencv获取图像RGB值的两种方法
2017-09-12 15:58
435 查看
1.使用opencv1中的IplImage
代码如下:
代码如下:
代码如下:
int main() { IplImage* img = cvLoadImage("lena.jpg"); CvScalar s; for (int y = 0; y <img->height; y++) { for (int x = 0; x < img->width; x++) { s = cvGet2D(img, y, x); int mu = (s.val[0] + s.val[1] + s.val[2]) / 3;//照片每个像素点RGB三通道的均值 int piex = sqrt((pow(s.val[0] - mu, 2) + pow(s.val[1] - mu, 2) + pow(s.val[2] - mu, 2))/3); s.val[0] = piex; s.val[1] = piex; s.val[2] = piex; //printf("mu=%d\n", mu); //printf("B=%f,G=%f,R=%f\n", s.val[0], s.val[1], s.val[2]);//获取的分别是BGR的值 cvSet2D(img, y, x, s); } } cvSaveImage("img.jpg", img); waitKey(0); }2.使用opencv2的Mat
代码如下:
int main() { Mat img = imread("lena.jpg"); for (int i = 0; i<img.rows; i++) { for (int j = 0; j<img.cols; j++) { int mu = img.at<Vec3b>(i, j)[0] + img.at<Vec3b>(i, j)[1] + img.at<Vec3b>(i, j)[2]; mu /= 3; int stdev = sqrt(double((img.at<Vec3b>(i, j)[0] - mu)*(img.at<Vec3b>(i, j)[0] - mu) + (img.at<Vec3b>(i, j)[1] - mu)*(img.at<Vec3b>(i, j)[1] - mu) + (img.at<Vec3b>(i, j)[2] - mu)*(img.at<Vec3b>(i, j)[2] - mu)) / 3); for (int k = 0; k<3; k++) img.at<Vec3b>(i, j)[k] = stdev; } } imshow("lena.jpg", img); imwrite("A.jpg", img); waitKey(0); return 0; }效果图如下:
相关文章推荐
- opencv获取图像像素值的两种方法
- 【opencv】获取图片某点像素值的两种方法
- OpenCV ios 摄像头获取和磁盘读取的图像RGB顺序问题
- vc/mfc获取rgb图像数据后动态显示及保存图片的方法
- Linux(V4L2驱动)下获得Opencv摄像头属性(图像输出格式和是否发生往RGB的转换)的方法
- Opencv 基础学习三 (OpenCV实现图像合并主要有两种方法)
- MFC获取rgb图像数据后动态显示及保存图片的方法
- opencv获取彩色(RGB)图像直方图
- 【opencv】 改变图像的对比度和亮度的两种方法
- 调用OpenCV的cvFindContours方法获取图像边界
- 两种获取灰度图像的方法
- C++读取图像的RGB值(两种方法,均经过测试)
- C# OpenCV学习笔记二之图像读写的两种方法
- 【OpenCV学习笔记 023】两种图像分割方法比较
- vc/mfc获取rgb图像数据后动态显示及保存图片的方法
- vc/mfc获取rgb图像数据后动态显示及保存图片的方法
- OpenCV对图像获取像素值方法总结
- OpenCV2学习笔记(四):两种图像分割方法比较
- OPenCV3.2 图像反差的两种方法
- C#两种获取灰度图像的方法