1. 程式人生 > >關於影象三通道和單通道的解釋

關於影象三通道和單通道的解釋

(一):單通道圖,

俗稱灰度圖,每個畫素點只能有有一個值表示顏色,它的畫素值在0到255之間,0是黑色,255是白色,中間值是一些不同等級的灰色。(也有3通道的灰度圖,3通道灰度圖只有一個通道有值,其他兩個通道的值都是零)。

(二):三通道圖,每個畫素點都有3個值表示 ,所以就是3通道。也有4通道的圖。例如RGB圖片即為三通道圖片,RGB色彩模式是工業界的一種顏色標準,是通過對紅(R)、綠(G)、藍(B)三個顏色通道的變化以及它們相互之間的疊加來得到各式各樣的顏色的,RGB即是代表紅、綠、藍三個通道的顏色,這個標準幾乎包括了人類視力所能感知的所有顏色,是目前運用最廣的顏色系統之一。總之,每一個點由三個值表示。

下面用一個簡單的例子說明三通道圖片和單通道圖片的區別

/**********************************************************************************************************
*檔案說明:
*        利用一個簡單的例子說明三通道圖片和單通道的含義
*開發環境:
*        win7+vs2010+opencv2.4.8
*時間地點:
*        陝西師範大學.2017.1.24
*作    者:
*        李麗 
***********************************************************************************************************/
#include<iostream>
#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#include<opencv2\opencv.hpp>

using namespace std;
using namespace cv;

int main()
{
	//載入一張彩色圖片並顯示
	Mat srcImage=imread("G:\\Image\\lenaRGB.png",1);  
	namedWindow("Image",WINDOW_AUTOSIZE);
	imshow("Image",srcImage);

	int nHeight=srcImage.rows;
	int nWidth=srcImage.cols;
	
	//載入一張灰度圖並顯示,這裡使用同一張圖片 只是imread函式的最後一個引數不一樣  效果是相同的
	Mat grayImage=imread("G:\\Image\\lenaRGB.png",0);
	namedWindow("grayImage",WINDOW_AUTOSIZE);
	imshow("grayImage",grayImage);
	
	//基本資訊
	cout<<"影象的高度"<<nHeight<<endl;
	cout<<"影象的寬度"<<nWidth<<endl;
	cout<<"Image的通道數"<<srcImage.channels()<<endl;      //彩色圖片的通道數
	cout<<"grayImage的通道數"<<grayImage.channels()<<endl; //灰度圖片的通道數

	for(int i=0;i<nHeight;i++)
	{
		for(int j=0;j<nWidth;j++)
		{
			srcImage.at<uchar>(i,j)=0;
			grayImage.at<uchar>(i,j)=0;
		}
	}
	namedWindow("彩色圖片處理後對應黑色圖片",WINDOW_AUTOSIZE);
	imshow("彩色圖片處理後對應黑色圖片",srcImage);

	namedWindow("灰度圖片處理後對應黑色圖片",WINDOW_AUTOSIZE);
	imshow("灰度圖片處理後對應黑色圖片",grayImage);

	cvWaitKey(0);
	cvDestroyWindow("Image");
	cvDestroyWindow("grayImage");
	cvDestroyWindow("彩色圖片處理後對應黑色圖片");
	cvDestroyWindow("灰度圖片處理後對應黑色圖片");

	return 0;

}
程式結果:



    

  好好體會 執行結果  就知道了。