- 11月 14 週四 201321:29
顯示視窗及對話框Displaying Windows and Dialogs
- 11月 12 週二 201316:27
影像形態學Binary Morphology Using OpenCV2.4.6 with Qt5.1-part2
開啟影像1直接複製一份給影像2, 方便做影像1(原始)和影像2(處理過後)的比較
- 11月 12 週二 201308:39
影像形態學Binary Morphology Using OpenCV2.4.6 with Qt5.1-part1
mainwindow.cpp的實作如下:
- 11月 09 週六 201309:01
滑鼠事件應用:切割感興趣區域之影像Mouse Event Application:Cropping ROI Image Using OpenCV2.4.6 with Qt5.1
qApp->installEventFilter(this);
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
QString str;
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
QPoint pt = mouseEvent->pos();
unsigned int x, y;
unsigned char r, g, b;
x = pt.x()/scaleFactor;
y = pt.y()/scaleFactor;
switch(event->type())
{
case QEvent::MouseMove:
mouseEvent = static_cast<QMouseEvent*>(event);
// 判斷停留在視窗1或是視窗2
switch(ui->tabWidget->currentIndex())
{
case 0:
str = "視窗1, 解析:" + QString::number(img_rgb1.cols) + "x" + QString::number(img_rgb1.rows)
+", 座標:(" + QString::number(x) + ", "+ QString::number(y) + ")";
getPixel(img_rgb1, y, x, &r, &g, &b);
str += ", RGB = (" + QString::number(r) + "," + QString::number(g) + "," + QString::number(b) + ")";
break;
case 1:
str = "視窗2, 解析:" + QString::number(img_rgb2.cols) + "x" + QString::number(img_rgb2.rows)
+", 座標:(" + QString::number(x) + ", "+ QString::number(y) + ")";
getPixel(img_rgb2, y, x, &r, &g, &b);
str += ", RGB = (" + QString::number(r) + "," + QString::number(g) + "," + QString::number(b) + ")";
break;
}
if(img_rgb1.cols > 0 | img_rgb2.cols)
ui->statusBar->showMessage(str);
break;
case QEvent::MouseButtonPress:
str = "MouseButtonPress(" + QString::number(x) +", " + QString::number(y) + ")";
ui->statusBar->showMessage(str); // 顯示座標
break;
case QEvent::MouseButtonRelease:
str = "MouseButtonRelease(" + QString::number(x) +", " + QString::number(y) + ")";
ui->statusBar->showMessage(str); // 顯示座標
break;
}
return false;
}
- 11月 07 週四 201317:05
OpenCV-2.4.6.1-GPU-demos-pack-win64

- 11月 07 週四 201311:12
RGB2HSV測試
img2=rgb2hsv(img);
figure;
imshow(img);
figure;
imshow(img2);
imwrite(img2, 'lena_hsv.jpg');
- 10月 31 週四 201322:25
外觀差異與比對 Shape Distance and Matching
今天在google有關shape matching的主題, 意外搜尋到OpenCV3.0.0.0的線上資料我想關於OpenCV 3.0將提供<ShapeDistanceExtractor>的介面, 應該是補足目前OpenCV 2.4.6 所提供的cv::matchShapes
- 10月 30 週三 201322:00
輪廓搜尋 Finding contours using OpenCV2.4.6 with Qt5.1
這次將整合搜尋輪廓find contours範例至Image Viewer平台, 開啟上一篇的範例程式<find contour VS2010 OpenCV2.4.6>
- 10月 30 週三 201315:03
輪廓搜尋 Finding contours using OpenCV2.4.6 with visual studio 2010
* @function findContours_Demo.cpp
* @brief Demo code to find contours in an image
* @author OpenCV team
*/
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace cv;
using namespace std;
Mat src; Mat src_gray;
int thresh = 100; // scollbar預設值(門檻值)
int max_thresh = 255; // scrollbar上限(max value)
RNG rng(12345); // Random Number Generator, 參考core.hpp
/// Function header
void thresh_callback(int, void* ); // 門檻回呼函式
/**
* @function main
*/
int main( int arg, char** argv )
{
/// Load source image and convert it to gray
const char* filename = arg == 2 ? argv[1] : "sample.jpg";
src = imread(filename, 1 );
/// Convert image to gray and blur it
cvtColor( src, src_gray, CV_BGR2GRAY ); // 轉灰階
blur( src_gray, src_gray, Size(3,3) ); // 模糊化
/// Create Window
const char* source_window = "Source";
namedWindow( source_window, CV_WINDOW_AUTOSIZE ); // CV_WINDOW_AUTOSIZE:使用者無法調整視窗大小
imshow( source_window, src );
createTrackbar( " Canny thresh:", "Source", &thresh, max_thresh, thresh_callback );/* createTrackbar(scrollbar名稱,
視窗標題,
scrollbar預設值,
scrollbar上限值,
回呼函式)
*/
thresh_callback( 0, 0 );
waitKey(0);
return(0);
}
/**
* @function thresh_callback
*/
void thresh_callback(int, void* )
{
Mat canny_output;
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
/// Detect edges using canny
Canny( src_gray, canny_output, thresh, thresh*2, 3 );
namedWindow( "Canny", CV_WINDOW_AUTOSIZE ); // Canny output
imshow( "Canny", canny_output );
/// Find contours
findContours( canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );
/// Draw contours
//Mat drawing = Mat::zeros( canny_output.size(), CV_8UC3 ); // contour 輸出
Mat drawing;
src.copyTo(drawing);
for( size_t i = 0; i< contours.size(); i++ )
{
Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
drawContours( drawing, contours, (int)i, color, 3, 8, hierarchy, 0, Point() );
/*
void drawContours( InputOutputArray image,
InputArrayOfArrays contours,
int contourIdx,
const Scalar& color,
int thickness=1,
int lineType=8,
InputArray hierarchy=noArray(),
int maxLevel=INT_MAX,
Point offset=Point() );
*/
}
/// Show in a window
namedWindow( "Contours", CV_WINDOW_AUTOSIZE );
imshow( "Contours", drawing );
}
- 10月 30 週三 201310:17
Qt日期時間操作 Date and time in Qt
專案名稱: DateTimeGUI
-----------------------------------------------------------------------------------------------------------
開始利用QDate和QTime來進行日期時間的操作吧!
首先mainwindow.h加入下列標頭檔
#include <QDate>
#include <QTime>
#pragmaexecution_character_set("utf-8")
