图像处理的学习往往都是要先熟悉下图像的一些基本处理方法,之后再进行较深入的研究,我也将围绕学习图像处理的一般步骤来学习OpenCV,以后会常来这里写写字,当做自己的学习记录。
- // OpenCV_1.cpp : 定义控制台应用程序的入口点。
- //
- //彩虹图的颜色分配取一下值
- // R G B gray
- //----------------------------------
- // 红 255, 0, 0 255
- // 橙 255, 127, 0 204
- // 黄 255, 255, 0 153
- // 绿 0, 255, 0 102
- // 青 0, 255, 255 51
- // 蓝 0, 0, 255 0
- #include "stdafx.h"
- #include <opencv2/opencv.hpp>
- #include <stdio.h>
- using namespace cv;
- int _tmain(int argc, _TCHAR* argv[])
- {
- Mat img = imread("1.bmp", CV_LOAD_IMAGE_GRAYSCALE);//采用灰度格式读取图片
- namedWindow("bmp_img");
- imshow("bmp_img", img);
- Mat img_pseudocolor(img.rows, img.cols, CV_8UC3);//构造RGB图像,参数CV_8UC3教程文档里面有讲解
- int tmp=0;
- for (int y=0;y<img.rows;y++)//转为伪彩色图像的具体算法
- {
- for (int x=0;x<img.cols;x++)
- {
- tmp = img.at<unsigned char>(y,x);
- img_pseudocolor.at<Vec3b>(y,x)[0] = abs(255-tmp); //blue
- img_pseudocolor.at<Vec3b>(y,x)[1] = abs(127-tmp); //green
- img_pseudocolor.at<Vec3b>(y,x)[2] = abs( 0-tmp); //red
- }
- }
- namedWindow("img_pseudocolor");
- imshow("img_pseudocolor", img_pseudocolor);
- Mat img_color(img.rows, img.cols, CV_8UC3);//构造RGB图像
- #define IMG_B(img,y,x) img.at<Vec3b>(y,x)[0]
- #define IMG_G(img,y,x) img.at<Vec3b>(y,x)[1]
- #define IMG_R(img,y,x) img.at<Vec3b>(y,x)[2]
- uchar tmp2=0;
- for (int y=0;y<img.rows;y++)//转为彩虹图的具体算法,主要思路是把灰度图对应的0~255的数值分别转换成彩虹色:红、橙、黄、绿、青、蓝。
- {
- for (int x=0;x<img.cols;x++)
- {
- tmp2 = img.at<uchar>(y,x);
- if (tmp2 <= 51)
- {
- IMG_B(img_color,y,x) = 255;
- IMG_G(img_color,y,x) = tmp2*5;
- IMG_R(img_color,y,x) = 0;
- }
- else if (tmp2 <= 102)
- {
- tmp2-=51;
- IMG_B(img_color,y,x) = 255-tmp2*5;
- IMG_G(img_color,y,x) = 255;
- IMG_R(img_color,y,x) = 0;
- }
- else if (tmp2 <= 153)
- {
- tmp2-=102;
- IMG_B(img_color,y,x) = 0;
- IMG_G(img_color,y,x) = 255;
- IMG_R(img_color,y,x) = tmp2*5;
- }
- else if (tmp2 <= 204)
- {
- tmp2-=153;
- IMG_B(img_color,y,x) = 0;
- IMG_G(img_color,y,x) = 255-uchar(128.0*tmp2/51.0+0.5);
- IMG_R(img_color,y,x) = 255;
- }
- else
- {
- tmp2-=204;
- IMG_B(img_color,y,x) = 0;
- IMG_G(img_color,y,x) = 127-uchar(127.0*tmp2/51.0+0.5);
- IMG_R(img_color,y,x) = 255;
- }
- }
- }
- namedWindow("img_ rainbowcolor");
- imshow("img_ rainbowcolor", img_color);
-
-
- waitKey(0);
- destroyAllWindows();
- return 0;
- }
运行效果如下:
可以发现彩虹图的效果明显比伪彩色要好
阅读(20151) | 评论(0) | 转发(0) |