opencv结构操作与运算---通道的分割与合并cvSplit(),cvMerge(),cvMixChannels()
来源:互联网 发布:java中文版 编辑:程序博客网 时间:2024/05/21 04:20
通道的分割與合併,用到的是cvSplit()與cvMerge(),它可以把多通道分割成單通道,並且也可以把單通道都合併成多通道,下面的實作為利用通道分割與合併,將該圖的RGB值分開,並且個別的顯示出來,可以知道一張圖片RGB值的分佈狀況.
擷取RGB圖片,通道的分割與合併:
擷取RGB圖片,通道的分割與合併:
#include
#include
int main()
{
IplImage *Image1;
IplImage *RedImage,*GreenImage,*BlueImage;
IplImage *Channel1,*Channel2,*Channel3;
CvSize Size1;
Image1=cvLoadImage("grotto.jpg",1);
Size1=cvGetSize(Image1);
Channel1=cvCreateImage(Size1,IPL_DEPTH_8U,1);
Channel2=cvCreateImage(Size1,IPL_DEPTH_8U,1);
Channel3=cvCreateImage(Size1,IPL_DEPTH_8U,1);
cvSplit(Image1,Channel1,Channel2,Channel3,0);
BlueImage=cvCreateImage(Size1,IPL_DEPTH_8U,3);
GreenImage=cvCreateImage(Size1,IPL_DEPTH_8U,3);
RedImage=cvCreateImage(Size1,IPL_DEPTH_8U,3);
cvMerge(Channel1,0,0,0,BlueImage);
cvMerge(0,Channel2,0,0,GreenImage);
cvMerge(0,0,Channel3,0,RedImage);
cvNamedWindow("Red pic",1);
cvShowImage("Red pic",RedImage);
cvNamedWindow("Green pic",1);
cvShowImage("Green pic",GreenImage);
cvNamedWindow("Blue pic",1);
cvShowImage("Blue pic",BlueImage);
cvWaitKey(0);
}
#include
int main()
{
IplImage *Image1;
IplImage *RedImage,*GreenImage,*BlueImage;
IplImage *Channel1,*Channel2,*Channel3;
CvSize Size1;
Image1=cvLoadImage("grotto.jpg",1);
Size1=cvGetSize(Image1);
Channel1=cvCreateImage(Size1,IPL_DEPTH_8U,1);
Channel2=cvCreateImage(Size1,IPL_DEPTH_8U,1);
Channel3=cvCreateImage(Size1,IPL_DEPTH_8U,1);
cvSplit(Image1,Channel1,Channel2,Channel3,0);
BlueImage=cvCreateImage(Size1,IPL_DEPTH_8U,3);
GreenImage=cvCreateImage(Size1,IPL_DEPTH_8U,3);
RedImage=cvCreateImage(Size1,IPL_DEPTH_8U,3);
cvMerge(Channel1,0,0,0,BlueImage);
cvMerge(0,Channel2,0,0,GreenImage);
cvMerge(0,0,Channel3,0,RedImage);
cvNamedWindow("Red pic",1);
cvShowImage("Red pic",RedImage);
cvNamedWindow("Green pic",1);
cvShowImage("Green pic",GreenImage);
cvNamedWindow("Blue pic",1);
cvShowImage("Blue pic",BlueImage);
cvWaitKey(0);
}
上面的程式碼先讀取了圖檔,再創立了空的uchar型別單通道IplImage資料結構,各分成三個通道的資料結構,利用cvSplit()將圖形的通道分割,因此Channel1,Channel2,Channel3都取得數值了,而cvSplit()第五個引數為第四個通道的資料結構,因為是讀取一般的圖檔,只需要三個通道,所以將它設置為0,再來是創立三個通道為三的RGB圖形IplImage資料結構,利用cvMerge()置入RGB顏色個別的通道,不需要用到的通道就設為0,因此,RGB圖片就順利被擷取出來了.
對於多通道的混合,就要用到cvMixChannels()這個函式啦,他可做到連續多張輸出,輸入的圖片它的所有通道數做隨意的配置但是它的函式還是有些遊戲規則要注意的.
通道混合的實作:
對於多通道的混合,就要用到cvMixChannels()這個函式啦,他可做到連續多張輸出,輸入的圖片它的所有通道數做隨意的配置但是它的函式還是有些遊戲規則要注意的.
通道混合的實作:
#include
#include
int from_to[]={3,0
,2,1
,1,2
,0,3};//定义 通道 交换规则
int main()
{
IplImage *Image1,*Image2;
IplImage *GrayRGBImage;
CvSize Size1;
Image1=cvLoadImage("grotto.jpg",1);
Image2=cvLoadImage("grotto.jpg",0);
Size1=cvGetSize(Image1);
GrayRGBImage=cvCreateImage(Size1,IPL_DEPTH_8U,4);//四通道输出
CvArr const *src[]={Image1,Image2};//输入两张图,彩色RGB三通道和一个灰度单通道图
CvArr *dst[]={GrayRGBImage};//输出一张图,四通道
cvMixChannels(src,2,dst,1,from_to,4);//【核心】
cvNamedWindow("MixChannels",1);
cvShowImage("MixChannels",GrayRGBImage);
cvWaitKey(0);
}
上面將grotto.jpg的彩圖跟灰階圖分別用cvLoadImage()讀出來,而對於Image2的灰階圖,cvLoadImage()這個函式將它的灰階值存成了三個通道,接著再用IplImage資料結構創立一個自定義的通道格式"灰階+紅色+綠色+藍色",這邊,cvMixChannels()的函式內,目標圖(src)跟輸出圖(dst)都要放在一維陣列內,因為他可以對連續多張圖片做通道的混合,第一個引數為輸入CvArr結構的圖形陣列,第二個引數為他輸入的圖形個數,第三個為輸出的CvArr結構圖形陣列,再來是輸出的圖形個數,下一個引數,為通道交換的規則,在from_to的陣列內,數據的意義以兩個為一組,分別為將輸入的第三個通道置入輸出的第零的通道,第二個通道放第一個通道,第一個通道放第二個通道,第零個通道放入第三個通道,依此類推,由於輸入為兩張圖片,一張全彩圖,一張灰階圖,總通道數為4,灰階圖的為單通道uchar型別的矩陣型態,這邊from_to就是用輸出跟輸入的總通道數做交換的,第五個引數為被選取多少通道數,有四個通道被混合,因此from_to的陣列空間就為8。
from_to陣列的對應:
#include
int from_to[]={3,0
,2,1
,1,2
,0,3};//定义 通道 交换规则
int main()
{
IplImage *Image1,*Image2;
IplImage *GrayRGBImage;
CvSize Size1;
Image1=cvLoadImage("grotto.jpg",1);
Image2=cvLoadImage("grotto.jpg",0);
Size1=cvGetSize(Image1);
GrayRGBImage=cvCreateImage(Size1,IPL_DEPTH_8U,4);//四通道输出
CvArr const *src[]={Image1,Image2};//输入两张图,彩色RGB三通道和一个灰度单通道图
CvArr *dst[]={GrayRGBImage};//输出一张图,四通道
cvMixChannels(src,2,dst,1,from_to,4);//【核心】
cvNamedWindow("MixChannels",1);
cvShowImage("MixChannels",GrayRGBImage);
cvWaitKey(0);
}
上面將grotto.jpg的彩圖跟灰階圖分別用cvLoadImage()讀出來,而對於Image2的灰階圖,cvLoadImage()這個函式將它的灰階值存成了三個通道,接著再用IplImage資料結構創立一個自定義的通道格式"灰階+紅色+綠色+藍色",這邊,cvMixChannels()的函式內,目標圖(src)跟輸出圖(dst)都要放在一維陣列內,因為他可以對連續多張圖片做通道的混合,第一個引數為輸入CvArr結構的圖形陣列,第二個引數為他輸入的圖形個數,第三個為輸出的CvArr結構圖形陣列,再來是輸出的圖形個數,下一個引數,為通道交換的規則,在from_to的陣列內,數據的意義以兩個為一組,分別為將輸入的第三個通道置入輸出的第零的通道,第二個通道放第一個通道,第一個通道放第二個通道,第零個通道放入第三個通道,依此類推,由於輸入為兩張圖片,一張全彩圖,一張灰階圖,總通道數為4,灰階圖的為單通道uchar型別的矩陣型態,這邊from_to就是用輸出跟輸入的總通道數做交換的,第五個引數為被選取多少通道數,有四個通道被混合,因此from_to的陣列空間就為8。
from_to陣列的對應:
輸入圖形共4個通道,輸出圖形亦是4個通道,選取了四組通道被混合。
cvSplit()
將多通道的圖形分割成單通道的圖形,第一個引數為輸入目標多通道圖形結構,第二,三,四,五個引數為輸出通道的圖形資料結構,輸出必須放單通道uchar型別的IplImage或CvMat矩陣資料結構
cvSplit(輸入多通道IplImage或CvMat資料結構圖形,輸出單通道IplImage或CvMat資料結構,輸出單通道IplImage或CvMat資料結構,輸出單通道IplImage或CvMat資料結構,輸出單通道IplImage或CvMat資料結構)
cvMerge()
合併單通道矩陣為成為多通道的圖形,前四個引數為單通道uchar型別的資料結構,第五個引數為輸出IplImage資料結構或CvMat結構圖形
cvMerge(輸入單通道IplImage或CvMat資料結構,輸入單通道IplImage或CvMat資料結構,輸入單通道IplImage或CvMat資料結構,輸入單通道IplImage或CvMat資料結構,輸出多通道IplImage或CvMat資料結構圖形)
cvMixChannels()
將多張圖形的通道做混合,輸入及輸出支援多張圖形,因此要放置在圖形陣列上,第一個引數為輸入CvArr圖形陣列,第二個為輸入圖形的個數,第三個為輸出CvArr圖形陣列,第四個為輸出圖形陣列的個數,第五個為通道數混合方式的陣列,第五個是被用到的總通道數
cvMixChannels(CvArr輸入圖形陣列,總輸入圖形數目,CvArr輸出圖形陣列,總輸出圖形數目,混合通道方式數據陣列,被混合的通道數)。
將多通道的圖形分割成單通道的圖形,第一個引數為輸入目標多通道圖形結構,第二,三,四,五個引數為輸出通道的圖形資料結構,輸出必須放單通道uchar型別的IplImage或CvMat矩陣資料結構
cvSplit(輸入多通道IplImage或CvMat資料結構圖形,輸出單通道IplImage或CvMat資料結構,輸出單通道IplImage或CvMat資料結構,輸出單通道IplImage或CvMat資料結構,輸出單通道IplImage或CvMat資料結構)
cvMerge()
合併單通道矩陣為成為多通道的圖形,前四個引數為單通道uchar型別的資料結構,第五個引數為輸出IplImage資料結構或CvMat結構圖形
cvMerge(輸入單通道IplImage或CvMat資料結構,輸入單通道IplImage或CvMat資料結構,輸入單通道IplImage或CvMat資料結構,輸入單通道IplImage或CvMat資料結構,輸出多通道IplImage或CvMat資料結構圖形)
cvMixChannels()
將多張圖形的通道做混合,輸入及輸出支援多張圖形,因此要放置在圖形陣列上,第一個引數為輸入CvArr圖形陣列,第二個為輸入圖形的個數,第三個為輸出CvArr圖形陣列,第四個為輸出圖形陣列的個數,第五個為通道數混合方式的陣列,第五個是被用到的總通道數
cvMixChannels(CvArr輸入圖形陣列,總輸入圖形數目,CvArr輸出圖形陣列,總輸出圖形數目,混合通道方式數據陣列,被混合的通道數)。
0 0
- opencv结构操作与运算---通道的分割与合并cvSplit(),cvMerge(),cvMixChannels()
- opencv学习笔记(十八)cvSplit()、cvMerge()彩色图片通道分割与融合
- OpenCV学习笔记_图像转换cvCvtColor、通道分割cvSplit以及通道合并cvMerge
- opencv cvSplit cvMerge
- OpenCV中cvSplit图像的通道分离
- OpenCV中cvSplit图像的通道分离
- 用cvSplit和cvMerge实现图像只显示单通道
- 通道的拆分与合并
- 视频写操作,通道分离与合并
- OpenCV学习之Mat数据按位操作与通道分离合并
- 直方图与通道分割
- opencv(10)---对比度亮度调整与通道分离与合并
- 【OpenCV的cvSplit函数】
- 文件的合并与分割
- 字符串的分割与合并
- 文件的合并与分割
- 文件的分割与合并
- 文件的分割与合并
- 关于Android studio创建时继承ActionBarActivity 如何修改的问题
- 算法基础:最大递减数问题(Golang实现)
- JavaScript JS中定义对象的几种方式
- 10004---云服务的三层概念
- 【图论】割点,桥,边双联通
- opencv结构操作与运算---通道的分割与合并cvSplit(),cvMerge(),cvMixChannels()
- 链表学习 代码
- leetCode 31.Next Permutation (下一个字典序排序) 解题思路和方法
- 黑马程序员---网络编程
- Android 曾经的小Bug(常识)
- APUE(第十章)信号
- 从客户端(textarea="<p>wewqe</p>")中检测到有潜在危险的 Request.QueryString 值。
- [leetcode] 233.Number of Digit One
- 最后通牒