- opncvtest.cpp : 定义控制台应用程序的入口点。
- //
- #include "stdafx.h"
- #include<stdio.h>
- #include <opencv2/opencv.hpp>
- using namespace std;
- using namespace cv;
- int _tmain(int argc, _TCHAR* argv[])
- {
- const char* imagename = "itti.jpg";
- //从文件中读入图像
- IplImage * img = cvLoadImage("C:\\Users\\laicb\\Desktop\\test.jpg");
- //如果读入图像失败
- IplImage * b = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
- IplImage * g = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
- IplImage * r = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
- printf("width = %d,height = %d chanels= %d depth = %d",img->width,img->height,img->nChannels,img->depth);
- char * data = img->imageData;
- int step = img->widthStep;
- int chanel = img->nChannels;
- char * bdata = b->imageData;
- char * gdata = g->imageData;
- char * rdata = r->imageData;
- for(int i=0;i<img->height;i++)
- {
- for(int j=0;j<img->width;j++)//这里注意三通道的step是单通道的三倍,这里注意除以3,否则数组越界,IPL_DEPTH_8U
- {
- bdata[i*step/3 + j] = data[i*step + j*chanel];
- gdata[i*step/3 + j] = data[i*step + j*chanel + 1];
- rdata[i*step/3 + j] = data[i*step + j*chanel + 2];
- }
- }
- //显示图像
- cvNamedWindow("blue");
- cvNamedWindow("green");
- cvNamedWindow("red");
- cvShowImage("blue",b);
- cvShowImage("green",g);
- cvShowImage("red",r);
- cvNamedWindow("Window Test");
- cvShowImage("Window Test",img);
- cvWaitKey(0);
- cvReleaseImage(&img);
- cvDestroyWindow("Window Test");
- //此函数等待按键,按键盘任意键就返回
- waitKey();
- return 0;
- }
IplImage的使用 从三通道图中分离出三个单通道
最新推荐文章于 2023-08-18 14:32:49 发布