获得RGB图像三种颜色分量并进行条件筛选
2017-06-04 17:01
459 查看
#include "highgui.h" #include"cv.h" using namespace std; using namespace cv; int main(int argc, char *argv[]) { IplImage *img = cvLoadImage("D:\\huo.jpg"); //R、S、B的阈值Rt,St,Bt int Rt = 125; int St = 55; int Bt = 9; //获得BGR三种颜色分量 //IplImage* img1 = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 1); //IplImage* img1 = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 3); uchar* data = (uchar *)img->imageData; int step = img->widthStep / sizeof(uchar); int channels = img->nChannels; uchar *b_BGR = new uchar[307200], *g_BGR = new uchar[307200], *r_BGR = new uchar[307200]; for (int i = 0; i<img->height; i++) for (int j = 0; j<img->width; j++) { *b_BGR = data[i*step + j*channels + 0]; *g_BGR = data[i*step + j*channels + 1]; *r_BGR = data[i*step + j*channels + 2]; if (*r_BGR < 200) { data[i*step + j*channels + 0] = 0; data[i*step + j*channels + 1] = 0; data[i*step + j*channels + 2] = 0; } else { data[i*step + j*channels + 0] = 255; data[i*step + j*channels + 1] = 255; data[i*step + j*channels + 2] = 255; } } cvShowImage("img", img); cvWaitKey(0); return 0; }
注意:
1:uchar是一种无符号整型数据,所以可以直接用数字进行对比筛选
2:data[i*step + j*channels + 0] //BRG三色分量相应位置的颜色数据
3:二值化一定要把三个通道的数据都设为0或255,否则其他两个通道的值不会发生变化
图1:原图(带有火焰的图像)
图2:对火焰R分量进行筛选之后的图像
相关文章推荐
- 使用 Java 进行图像处理 - 取得图像上指定位置像素的 rgb 颜色分量
- 使用 Java 进行图像处理 - 取得图像上指定位置像素的 rgb 颜色分量
- php获得图像某点颜色RGB色值
- UIColor获得RGB颜色分量的方法
- 使用Matlab绘制图像的rgb颜色空间和Lab颜色空间分量图和分量直方图
- 图像的RGB颜色空间和HSI空间的转换
- MATLAB中RGB图像的各分量灰度直方图
- Delphi,创建 RGB CMYK颜色分量圆 完整代码
- 多个dropdownlist进行条件的筛选判断
- java获得鼠标所在位置的图像的rgb值
- 利用颜色表进行图像预处理1:OpenGl显示三维颜色表
- 使用roberts Prewitt Sobel 三种算子对raw格式图像进行边缘检测
- 如何对YUV420进行颜色转换RGB24/RGB32
- 对 ASP.NET 图像的颜色量化(Quantization)进行优化(From MS)
- Opencv读取文件夹连续图片,RGB分量显示,图像灰度化
- excel中根据单元格背景颜色进行数据筛选(excel2003实现方法)
- java获得鼠标所在位置的图像的rgb值。
- 创建RGB、CMYK颜色分量圆代码
- RGB色彩交界处好看的三种淡颜色
- 查看图像的颜色在RGB空间中的分布