OPENCV:从RGB转换为灰度只有蓝色
opencv: Conversion from RGB to grayscale getting only blue
我正在尝试使用c 的opencv将一些RGB颜色图像转换为Greyscale原始
"转换"
Vec3b simpleAveraging(Vec3b color){
Vec3b gray = ((float)color[0] + (float)color[1] + (float)color[2]) / 3.0;
return gray;
}
Vec3b weightedAverage1(Vec3b color){
Vec3b gray = 0.3 * (float)color[2] + 0.59 * (float)color[1] + 0.11 * (float)color[0];
return gray;
}
Vec3b weightedAverage2(Vec3b color){
Vec3b gray = 0.2126 * (float)color[2] + 0.7152 * (float)color[1] + 0.0722 * (float)color[0];
return gray;
}
Vec3b weightedAverage3(Vec3b color){
Vec3b gray = 0.299 * (float)color[2] + 0.587 * (float)color[1] + 0.114 * (float)color[0];
return gray;
}
...
for(int i = 0; i < 12; i++){
for(int y = 0; y < img[i].rows; y++){
for(int x = 0; x < img[i].cols; x++){
color = img[i].at<Vec3b>(Point(x, y));
img[i].at<Vec3b>(Point(x, y)) = weightedAverage3(color);
}
}
}
是一个大学项目,我的教授告诉我使用这些算法,所以我不能使用CV_RGB2Gray。
我使用每种方法都得到蓝色比例。
您确定只有3个频道吗?
无论如何在这种情况下:
uint8_t weightedAverage3(Vec3b color){
uint8_t gray = 0.301 * (float)color[0] + 0.587 * (float)color[1] + 0.114 * (float)color[2];
return gray;
}
for(int i = 0; i < 12; i++){
for(int y = 0; y < img[i].rows; y++){
for(int x = 0; x < img[i].cols; x++){
color = img[i].at<Vec3b>(Point(x, y));
img[i].at<uchar>(Point(x, y)) = weightedAverage3(color);
}
}
}
假设0是r,1是g,而2为b。
相关文章:
- 在 C++ 中将 RGB 更改为灰度
- OpenCV - 如何在灰度图像上应用 Kmeans?
- OpenCV - 如何将灰度转换为彩色(CV_8UC3)?
- C++灰度图像处理
- 如何显示具有 opengl 纹理的灰度图像
- C++ Gdi+将图像转换为灰度
- 将 BMP 图像转换为灰度
- 如何使用Canny到32位灰度
- 颜色到灰度转换
- (C++)(Visual Studio) 将高斯模糊滤镜应用于 RGB 中的灰度图像
- 使用 SSE 以最快的速度缩小 8 位灰度图像
- 使用 OpenCV 和 C++将 16 位灰度图像更改为彩色图像
- 有没有办法使用 glDrawPixel 渲染单通道灰度图像?
- goodFeaturesToTrack() 只适用于灰度?
- 如何在OpenCV中减去两个不同尺寸的图像和灰度图像
- 使用 ImageMagick 从像素强度数组创建灰度图像时遇到问题
- 如何将图像转换为灰度 opengl c++
- 将高斯模糊应用于灰度图像
- C++:灰度位图标题和实时绘画+opencv图像处理
- OPENCV:从RGB转换为灰度只有蓝色