OpenGL de プログラミング - IplImage編08::まとめ3
現在地 >> メニュー >> OpenCV >> IplImage編08 >> IplImage編08::まとめ3

問題1

画像を読み込んで、5×5で十字形のカーネルで膨張処理を行え

答え1

#include <iostream>
#include <string>
#include <cv.h>
#include <highgui.h>

#pragma comment(lib,"cv200.lib")
#pragma comment(lib,"cxcore200.lib")
#pragma comment(lib,"highgui200.lib")

const char *filename = "gm2.png";


int main()
{
	IplImage *imgA = cvLoadImage(filename);
	if(imgA == NULL)
	{
		std::cerr << "Can't Load Image\n";
		return -1;
	}

	//5x5カーネルアンカポイントはカーネルの中心(十字形)
	IplConvKernel *cnvK = cvCreateStructuringElementEx(5,5,2,2,CV_SHAPE_CROSS);

	//画像の膨張(低い画素値部分が収縮)
	cvErode(imgA,imgA,cnvK,4);//カラー画像も可能
	
	cvReleaseStructuringElement(&cnvK);

	cvNamedWindow("cvErode");
	cvShowImage("cvErode",imgA);
	cvWaitKey();
	
	cvReleaseImage(&imgA);
	cvDestroyAllWindows();

	return 0;
}

問題2

画像を読み込んで、5×5で独自の形状のカーネルを使って、膨張処理を行え。

答え2

#include <iostream>
#include <string>
#include <cv.h>
#include <highgui.h>

#pragma comment(lib,"cv200.lib")
#pragma comment(lib,"cxcore200.lib")
#pragma comment(lib,"highgui200.lib")

const char *filename = "gm2.png";
int kernel[]=
{
	1,0,0,0,0,
	0,1,0,0,0,
	0,0,1,0,0,
	0,0,0,1,0,
	0,0,0,0,1
};

int main()
{
	IplImage *imgA = cvLoadImage(filename);
	if(imgA == NULL)
	{
		std::cerr << "Can't Load Image\n";
		return -1;
	}

	//5x5カーネルアンカポイントはカーネルの中心
	IplConvKernel *cnvK = cvCreateStructuringElementEx(5,5,2,2,CV_SHAPE_CUSTOM,kernel);

	//画像の膨張(低い画素値部分が収縮)
	cvErode(imgA,imgA,cnvK,4);//カラー画像も可能
	
	cvReleaseStructuringElement(&cnvK);

	cvNamedWindow("cvErode");
	cvShowImage("cvErode",imgA);
	cvWaitKey();
	
	cvReleaseImage(&imgA);
	cvDestroyAllWindows();

	return 0;
}