最近正在學習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();
}