数字图像处理彩色图像(1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include
#include
using namespace cv;
using namespace std;
void Color2Gray(const unsigned char src_data[], unsigned char dst_data[], int dstDataSize)
{
int i;
for (i = 0; i < dstDataSize; ++i)
{
//src_data[i * 3]存储的为B分量,src_data[i * 3 + 1]存储的为G分量,src_data[i * 3 + 2]存储的为R分量
dst_data[i] = cvRound(src_data[i * 3] * 0.114 + src_data[i * 3 + 1] * 0.587 + src_data[i * 3 + 2] * 0.299);
}
}
void ColorRGB(const unsigned char src_data[], unsigned char dst_data[], int dstDataSize)
{
int i;
for (i = 0; i < dstDataSize; ++i)
{
//src_data[i * 3]存储的为B分量,src_data[i * 3 + 1]存储的为G分量,src_data[i * 3 + 2]存储的为R分量
dst_data[i * 3] = src_data[i * 3 + 1];
dst_data[i * 3+1] = src_data[i * 3 + 2];
dst_data[i * 3+2] = src_data[i * 3 ];
}
}
int main(int argc, char** argv)
{
Mat src, dst;
char* source_window = "Source image";
char* gray_window = "gray image";
char* RGB_window = "ColorRGB image";
src = imread(argv[1], 1);
namedWindow(source_window, CV_WINDOW_AUTOSIZE);
imshow(source_window, src);
dst = Mat::zeros(src.rows, src.cols, CV_8UC1);
Color2Gray(src.data, dst.data, src.cols*src.rows);
namedWindow(gray_window, CV_WINDOW_AUTOSIZE);
imshow(gray_window, dst);
dst = Mat::zeros(src.rows, src.cols, CV_8UC3);
ColorRGB(src.data, dst.data, src.cols*src.rows);
namedWindow(RGB_window, CV_WINDOW_AUTOSIZE);
imshow(RGB_window, dst);
waitKey(0);
return 0;
}