计算机视觉class1-图像处理基础

要点

1.彩色图像灰度化
2.灰度直方图
3.灰度图像的伪彩图

1.彩色图像灰度化
一句opencv代码搞定,或者读入的图片以灰度图形式读入。

cv::imread("1.jpg",0);//以灰度图形式读入

2.灰度直方图以及灰度图像的伪彩图
灰度直方图:统计一幅图片中的灰度值分布

伪彩图:将特定值域的灰度值,映射成某一种颜色,设计单通道到三通道转换。

附上代码如下:


#include <opencv2\opencv.hpp>
#include <vector>
#include <iostream>
using namespace cv;

//#define uchar unsigned char


int main(int argc, char** argv)
{


    Mat sourceImage = imread("1.jpg");
    Mat processedImage;
    cvtColor(sourceImage, processedImage, CV_RGB2GRAY);
    Mat presudoColor(processedImage.rows, processedImage.cols, CV_8UC3);
    //std::cout << processedImage << std::endl << std::endl;
    imshow("origin", sourceImage);
    imshow("processed", processedImage);

    int channel = 0;
    MatND dstHist;
    int histSize[] = { 256 };
    float range[] = { 0, 255 };
    const float* ranges[] = { range };
    calcHist(&processedImage, 1, &channel, Mat(), dstHist, 1, histSize, ranges, true, false);
    Mat drawImage = Mat::zeros(Size(256, 512), CV_8UC1);
    double g_dHistMaxValue;
    minMaxLoc(dstHist, 0, &g_dHistMaxValue, 0, 0);
    for (int i = 0; i < 256; i++)
    {
    int value = cvRound(dstHist.at<float>(i) *512 * 0.9 / g_dHistMaxValue);//同一个灰度值的像素可能非常的多,所以归一化放在窗口里
    //int value = cvRound(dstHist.at<float>(i) );
    line(drawImage, Point(i, drawImage.rows - 1), Point(i, drawImage.rows - 1 - value), Scalar(255,255,255));
    }
    imshow("final", drawImage);



    int temp = 0;
    for (int y = 0; y <presudoColor.rows; y++)
    {
        for (int x = 0; x < presudoColor.cols; x++)
        {
             temp = processedImage.at<uchar>(y, x);

             if (temp < 85)
             {
                presudoColor.at<Vec3b>(y, x)[0] = 255;
                presudoColor.at<Vec3b>(y, x)[1] = 0;
                presudoColor.at<Vec3b>(y, x)[2] = 0;
             }
             else if (temp < 171)
             {
                 presudoColor.at<Vec3b>(y, x)[0] = 0;
                 presudoColor.at<Vec3b>(y, x)[1] = 255;
                 presudoColor.at<Vec3b>(y, x)[2] = 0;
             }
             else if (temp < 256)
             {
                 presudoColor.at<Vec3b>(y, x)[0] = 0;
                 presudoColor.at<Vec3b>(y, x)[1] = 0;
                 presudoColor.at<Vec3b>(y, x)[2] = 255;
             }
             else
                 throw;
        }
    }

    imshow("presudoColor", presudoColor);
    waitKey(0);
    return 1;
}

最后华丽丽的给出结果图
原图灰度图
直方图伪彩图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值