update: 2013/12/24
reference:
1. Amazon.com: Practical OpenCV eBook
2. Welcome to opencv documentation!
3. I touchs: Using OpenCV on Mac OS X
A. 前置作業:
1. 先依照 I touchs: Using OpenCV on Mac OS X 的說明, 建置好開發環境.
2. 需要加入到專案的 OpenCV 函式庫爲: (Add Files to Project...)
libopencv_core.dylib
libopencv_highgui.dylib
libopencv_imgproc.dylib
3. 將 main.cpp 的 main function 更名.(不作為程式執行的進入點)
//int main(int argc, const char * argv[])
int main_main(int argc, const char * argv[])
4. 爲專案新增 C++ 檔案:
點選專案 > New File... > OS X > C and C++ > C++ Class > Next >
Save as: colorSpaceConversion.cpp > Create
----------------------------------------------------------------------------------------
B. 撰寫程式:
1. 開啓 colorSpaceConversion.h 檔案, 修改如下:
#ifndef __HelloOpenCV__colorSpaceConversion__
#define __HelloOpenCV__colorSpaceConversion__
#include <iostream>
//@add
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#endif /* defined(__HelloOpenCV__colorSpaceConversion__) */
---------------------------------------------------------------------------------
2. 開啓 colorSpaceConversion.cpp 檔案, 修改如下:
#include "colorSpaceConversion.h"
//@add
using namespace std;
using namespace cv;
// Global variables
const int slider_max = 100; // slider 最大的數值
int slider; // slider 目前的數值
double alpha; // 加權數(0.0 ~ 1.0)
double beta; // 加權數(0.0 ~ 1.0)
// Matrices to store images
Mat img_source; // 原始照片
Mat img_converted; // 存放色彩轉換後的照片
Mat img_destination; // 存放二張照片加權後所合成的照片
// Callback function for trackbar event
void on_trackbar(int pos, void *)
{
// case 1 與 case 2: 擇一執行
printf("slider position: %d \n", slider);
// case 1: RGB to GRAY
if (pos > 0) {
// 將 RGB 的照片: img_source, 轉換成灰階並存入 img_converted 中
cvtColor(img_source, img_converted, CV_RGB2GRAY);
}
else {
img_converted = img_source;
}
// 顯示照片
imshow("Trackbar app", img_converted);
/*************************************************************/
/*
// case 2: RGB to BGR
// 將 RGB 的照片: img_source, 轉換成 BGR 並存入 img_converted 中
cvtColor(img_source, img_converted, CV_RGB2BGR);
alpha = (double)slider/slider_max; // 加權數(0.0 ~ 1.0)
beta = (1.0 - alpha); // 加權數(0.0 ~ 1.0)
// 計算各別(照片)矩陣的加權值 (img_source x beta) + (img_converted) x alpha ,
// 存入 img_destination 中, 並且各別的照片必須要有相同的大小(size)與類型(type)
// p.s. 不可使用 RGB(3個 channel) 與 灰階(1個 channel) 來作加權計算.
addWeighted(img_source, beta, img_converted, alpha, 0.0, img_destination);
// 顯示照片
imshow("Trackbar app", img_destination);
*/
}
int main()
{
// Read image
//img_source = imread("/Lanli/RD/Projects/OpenCV_Mac/HelloOpenCV/pipi.png", CV_LOAD_IMAGE_COLOR);
//img_source = imread("/Lanli/RD/Projects/OpenCV_Mac/HelloOpenCV/pipi.png", CV_LOAD_IMAGE_GRAYSCALE);
img_source = imread("/Lanli/RD/Projects/OpenCV_Mac/HelloOpenCV/pipi.png");
// check if image was loaded
if( !img_source.data ) {
printf("Error loading img_source \n");
return -1;
}
// Initialize values
slider = 0;
// Create Windows
//namedWindow("Trackbar app", WINDOW_AUTOSIZE);
//namedWindow("Trackbar app", WINDOW_NORMAL);
namedWindow("Trackbar app");
// Create Trackbars
char TrackbarName[50];
sprintf(TrackbarName, "TrackBar Max: %d", slider_max);
createTrackbar(TrackbarName, "Trackbar app", &slider, slider_max, on_trackbar);
// Show some stuff
on_trackbar(slider, 0);
// Wait until user press 'q'
//
// 回圈: 等待 1 微秒(以作業系統的最小時間爲下限)來偵測鍵盤事件,
// 如果不是按下 'q', 就一直偵測下去.
// p.s. 至少要有一個 HighGUI 的視窗存在且啟用, 才會有作用
while(char(waitKey(1)) != 'q') {
}
// destroys all of the opened HighGUI windows.
destroyAllWindows();
return 0;
}
----------------------------------------------------------------------------------------
C. 執行結果:
1. RGB to GRAY:
slider position: 0
slider position: 50
2. RGB to BGR:
slider position: 75
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。