当前位置:   article > 正文

【OpenCV】 基础入门(二)图像基础概念 | 图像灰度化处理 | 图像二值化处理

【OpenCV】 基础入门(二)图像基础概念 | 图像灰度化处理 | 图像二值化处理

一、图像信息

  在计算机中用一般用M x N的矩阵来表示一幅尺寸大小为M x N的数字图像,矩阵元素的值就是该图像对应位置上的像素值。

   对于计算机本地磁盘中的彩色图像,单机鼠标右键,选择“属性”,可以看到一幅图像的基本信息。

二、图像种类

1、灰度图:

  灰度图是每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色的灰度。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑色与白色两种颜色,但是灰度图像在黑色与白色之间还有许多级的颜色深度。

2、二值图像:

   一幅二值图像的二维矩阵仅由 0、1 两个值构成,“0”代表黑色,“1”代表白色。二值图像可以看成是灰度图像的一个特例。
二值图像通常用于文字、线条图的扫描识别(OCR)和掩膜图像的存储。

3、彩色图:

  彩色图的每个像素通常是由红(R)、绿(G)、蓝(B)三个分量来表示的。RGB 图像每一个像素的颜色值(由RGB三原色表示)直接存放在图像矩阵中,由于每一像素的颜色需由 R、G、B 三个分量来表示,M、N 分别表示图像的行列数,三个M x N的二维矩阵分别表示各个像素的 R、G、B 三个颜色分量。RGB图像的数据类型一般为 8 位无符号整形,通常用于表示和存放真彩色图像。

二、图像处理

1、图像灰度化处理

  OpenCV 使用函数 cvtColor 来将输入图像从一个颜色空间转换为另一个颜色空间。可以用来对图像进行灰度化。

void cv::cvtColor(InputArray src, OutputArray dst, int code, int dstCn = 0) 	
  • 1

  其中,参数表示 src 输入图像,参数 dst 表示输出图像,参数 code 表示颜色空间转换的标识符,参数 dstCn 表示目标图像的通道数,若该参数值为 0,表示目标图像取源图像的通道数。

#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2/imgproc/types_c.h>
using namespace cv;
using namespace std;
int main() {
	//读取源图像并转化为灰度图像
	cv::Mat srcImage = imread("...\\dog.jpg");
	if (!srcImage.data)
		return 1;
	//读取源图像并转化为灰度图像
	Mat srcGray;
	cvtColor(srcImage, srcGray, CV_RGB2GRAY);
	//显示源图像及灰度图像
	imshow("srcImage", srcImage);
	imshow("srcGray", srcGray);
	waitKey(0);
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

运行结果如图所示
在这里插入图片描述

2、图像二值化处理

  OpenCV 使用函数 threshold 进行阈值化处理,实现二值化。

threshold( InputArray src, OutputArray dst, double thresh, double maxval, int type )
  • 1

  其中,参数表示 src 输入图像,参数 dst 表示输出图像,参数 thresh表示阈值,参数 maxval像素最大值,参数 type 表示阈值处理的方式。

#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2/imgproc/types_c.h>
using namespace cv;
using namespace std;
int main() {
    //读取源图像并转化为灰度图像
    cv::Mat srcImage = imread("C:\\Users\\86173\\Desktop\\cc.jpg");
    if (!srcImage.data)
        return 1;
    //读取源图像并转化为灰度图像
    Mat srcGray;
    cvtColor(srcImage, srcGray, CV_RGB2GRAY);
    // 二值化
    Mat srcBinary;
    threshold(srcGray, srcBinary, 127, 255, cv::THRESH_BINARY);
    //显示源图像及二值化图像
    imshow("srcImage", srcImage);
    imshow("srcGray", srcBinary);
    waitKey(0);
    return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

在这里插入图片描述

推荐阅读
相关标签