Chinaunix首页 | 论坛 | 博客
  • 博客访问: 376461
  • 博文数量: 214
  • 博客积分: 770
  • 博客等级: 军士长
  • 技术积分: 1969
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-08 01:22
文章分类

全部博文(214)

文章存档

2013年(110)

2012年(104)

我的朋友

分类: C/C++

2013-01-03 22:37:06


 

图像处理的学习往往都是要先熟悉下图像的一些基本处理方法,之后再进行较深入的研究,我也将围绕学习图像处理的一般步骤来学习OpenCV,以后会常来这里写写字,当做自己的学习记录。

点击(此处)折叠或打开

  1. // OpenCV_1.cpp : 定义控制台应用程序的入口点。
  2. //
  3. //彩虹图的颜色分配取一下值
  4. // R G B gray
  5. //----------------------------------
  6. // 红 255, 0, 0 255
  7. // 橙 255, 127, 0 204
  8. // 黄 255, 255, 0 153
  9. // 绿 0, 255, 0 102
  10. // 青 0, 255, 255 51
  11. // 蓝 0, 0, 255 0

  12. #include "stdafx.h"
  13. #include <opencv2/opencv.hpp>
  14. #include <stdio.h>
  15. using namespace cv;

  16. int _tmain(int argc, _TCHAR* argv[])
  17. {

  18.    Mat img = imread("1.bmp", CV_LOAD_IMAGE_GRAYSCALE);//采用灰度格式读取图片
  19.    namedWindow("bmp_img");
  20.    imshow("bmp_img", img);

  21.    Mat img_pseudocolor(img.rows, img.cols, CV_8UC3);//构造RGB图像,参数CV_8UC3教程文档里面有讲解
  22.    int tmp=0;
  23.    for (int y=0;y<img.rows;y++)//转为伪彩色图像的具体算法
  24.    {
  25.       for (int x=0;x<img.cols;x++)
  26.       {
  27.          tmp = img.at<unsigned char>(y,x);
  28.          img_pseudocolor.at<Vec3b>(y,x)[0] = abs(255-tmp); //blue
  29.          img_pseudocolor.at<Vec3b>(y,x)[1] = abs(127-tmp); //green
  30.          img_pseudocolor.at<Vec3b>(y,x)[2] = abs( 0-tmp); //red
  31.       }
  32.    }
  33.    namedWindow("img_pseudocolor");
  34.    imshow("img_pseudocolor", img_pseudocolor);

  35.  Mat img_color(img.rows, img.cols, CV_8UC3);//构造RGB图像
  36. #define IMG_B(img,y,x) img.at<Vec3b>(y,x)[0]
  37. #define IMG_G(img,y,x) img.at<Vec3b>(y,x)[1]
  38. #define IMG_R(img,y,x) img.at<Vec3b>(y,x)[2]
  39.    uchar tmp2=0;
  40.    for (int y=0;y<img.rows;y++)//转为彩虹图的具体算法,主要思路是把灰度图对应的0~255的数值分别转换成彩虹色:红、橙、黄、绿、青、蓝。
  41.    {
  42.       for (int x=0;x<img.cols;x++)
  43.       {
  44.          tmp2 = img.at<uchar>(y,x);
  45.          if (tmp2 <= 51)
  46.          {
  47.             IMG_B(img_color,y,x) = 255;
  48.             IMG_G(img_color,y,x) = tmp2*5;
  49.             IMG_R(img_color,y,x) = 0;
  50.          }
  51.          else if (tmp2 <= 102)
  52.          {
  53.             tmp2-=51;
  54.             IMG_B(img_color,y,x) = 255-tmp2*5;
  55.             IMG_G(img_color,y,x) = 255;
  56.             IMG_R(img_color,y,x) = 0;
  57.          }
  58.          else if (tmp2 <= 153)
  59.          {
  60.             tmp2-=102;
  61.             IMG_B(img_color,y,x) = 0;
  62.             IMG_G(img_color,y,x) = 255;
  63.             IMG_R(img_color,y,x) = tmp2*5;
  64.          }
  65.          else if (tmp2 <= 204)
  66.          {
  67.             tmp2-=153;
  68.             IMG_B(img_color,y,x) = 0;
  69.             IMG_G(img_color,y,x) = 255-uchar(128.0*tmp2/51.0+0.5);
  70.             IMG_R(img_color,y,x) = 255;
  71.          }
  72.          else
  73.          {
  74.             tmp2-=204;
  75.             IMG_B(img_color,y,x) = 0;
  76.             IMG_G(img_color,y,x) = 127-uchar(127.0*tmp2/51.0+0.5);
  77.             IMG_R(img_color,y,x) = 255;
  78.          }
  79.       }
  80.    }
  81.    namedWindow("img_ rainbowcolor");
  82.    imshow("img_ rainbowcolor", img_color);

  83.    
  84.    
  85.    waitKey(0);
  86.    destroyAllWindows();
  87.  return 0;
  88. }

运行效果如下:

可以发现彩虹图的效果明显比伪彩色要好

阅读(20029) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~