opencv获取图像RGB值的两种方法

来源:互联网 发布:咸阳网络买花花店 编辑:程序博客网 时间:2024/06/04 20:40

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;}
效果图如下:


原创粉丝点击