您的位置:首页 > 运维架构

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: