opencv基礎實例(C++)

    最近正在學習opencv,主要涉及其中對圖像的操作,現簡單的給出部分基礎實例,讀者在使用時,只需打開某個實例的註釋即可運行代碼。有關各個函數的參數的具體意義並沒具體的說明,請讀者自行閱讀手冊,這是學習opencv必須經歷的過程。如下實例僅僅給讀者一個編程參考,後續將持續更新。

/**
*@main.cpp
*@learning note
*@Ali
*/

#include "opencv2/core/core.hpp"
#include "opencv2/videoio/videoio.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"

using namespace cv;

int main()
{
	///邊緣提取sobel算子
	
	IplImage *src = cvLoadImage("C:\\1.jpg", 1);
	IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
	//cvSobel(src, dst, 0, 1, 7);//一般核
	cvSobel(src, dst, 0, 1, CV_SCHARR);//優化過的核
	cvShowImage("dst", dst);
	

	///Laplace變換
	/*
	IplImage *src = cvLoadImage("C:\\1.jpg", 1);
	IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
	cvLaplace(src, dst, 9);
	cvShowImage("Laplace", dst);
	*/

	///blurring處理
	/*
	IplImage *src = cvLoadImage("C:\\1.jpg", 1);
	IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
	cvSmooth(src, dst, CV_BLUR_NO_SCALE, 3, 0, 0.0, 0.0);
	cvShowImage("Smooth", dst);
	*/

	///Erode腐蝕
	/*
	IplImage *src = cvLoadImage("C:\\1.jpg", 1);
	IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
	cvErode(src, dst, 0,1);
	*/

	///Dilate膨脹
	/*
	IplImage *src = cvLoadImage("C:\\1.jpg", 1);
	IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
	cvDilate(src, dst, 0, 1);
	cvShowImage("Dilate", dst);
	*/

	///漫水填充法
	/*
	IplImage *src = cvLoadImage("C:\\1.jpg", 1);
	IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
	cvFloodFill(src, CvPoint(10, 200), cvScalar(120,25,55), cvScalar(30,30,30), cvScalar(30,30,30), NULL, 8, NULL);
	cvShowImage("src", src);
	*/

	///尺寸調整
	/*
	IplImage *src = cvLoadImage("C:\\1.jpg", 1);
	IplImage *dst = cvCreateImage(CvSize((src->width)*0.5, (src->height)*0.5), src->depth, src->nChannels);
	cvResize(src, dst, CV_INTER_LINEAR);
	cvShowImage("Resize", dst);
	*/

	///圖像金字塔
	/*
	IplImage *src = cvLoadImage("C:\\1.jpg", 1);
	IplImage *dst = cvCreateImage(CvSize(src->width / 2, src->height / 2), src->depth, src->nChannels);
	cvPyrDown(src, dst);
	cvShowImage("Pyrdown",dst);
	//IplImage *dst = cvCreateImage(CvSize(src->width * 2, src->height * 2), src->depth, src->nChannels);
	//cvPyrUp(src, dst);
	//cvShowImage("Pyrup", dst);
	*/

	///金字塔分割
	/*導入cvpyrsegmention出現問題,應該include一些東西,缺失*/

	///閾值
	/*
	IplImage *src = cvLoadImage("C:\\1.jpg", 1);
	IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
	IplImage *r = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
	IplImage *g = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
	IplImage *b = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
	IplImage *temp = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
	IplImage *dst2 = cvCreateImage(cvGetSize(src), src->depth,1);
	cvSplit(src, r, g, b, NULL);
	cvAddWeighted(r, 1.0 / 3.0, g, 1.0 / 3.0, 0.0, temp);
	cvAddWeighted(temp, 2.0 / 3.0, b, 1.0 / 3.0, 0.0, temp);
	cvThreshold(temp,dst2, 100, 100, CV_THRESH_TRUNC);
	cvShowImage("Threshold", dst2);
	*/

	///自適應閾值(只能單通道)
	/*
	IplImage *src = cvLoadImage("C:\\1.jpg", 0);
	IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
	cvAdaptiveThreshold(src, dst, 200.0, 0, 0, 3, 5.0);
	cvShowImage("AdaptThreshold", dst);
	*/

	///卷積
	/*
	IplImage *src = cvLoadImage("C:\\1.jpg", 1);
	IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
	int data[] = { 5, 0, 0, 0, 5, 0, 0, 0, 5 };
	CvMat kernel = cvMat(3, 3, CV_MAT_MAGIC_VAL, data);
	cvFilter2D(src, dst, &kernel, cvPoint(-1, -1));
	cvShowImage("Convolution", dst);
	*/

	///處理卷積邊界
	/*
	int kernel = 11;
	IplImage *src = cvLoadImage("C:\\1.jpg", 1);
	IplImage *dst = cvCreateImage(CvSize(src->width+10, src->height+10), src->depth, src->nChannels);//構造大圖像
	cvCopyMakeBorder(src, dst, cvPoint((kernel - 1) / 2, (kernel - 1) / 2), IPL_BORDER_CONSTANT, cvScalarAll(0));
	cvShowImage("Border", dst);
	*/

	waitKey(0);
	cvReleaseImage(&src);
	cvReleaseImage(&dst);
	cvDestroyAllWindows();
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章