Добавлен оператор Щарра. Добавлен счетчик сохранённых кадров. Исправлен баг - не отмечался пункт меню Пауза.
This commit is contained in:
parent
3e57fbb9d2
commit
cd99ec4268
@ -64,6 +64,7 @@ BEGIN
|
|||||||
MENUITEM "&Робертс\t1", ID_OP_ROBERTS
|
MENUITEM "&Робертс\t1", ID_OP_ROBERTS
|
||||||
MENUITEM "&Прюитт\t2", ID_OP_PREWITT
|
MENUITEM "&Прюитт\t2", ID_OP_PREWITT
|
||||||
MENUITEM "&Собель\t3", ID_OP_SOBEL
|
MENUITEM "&Собель\t3", ID_OP_SOBEL
|
||||||
|
MENUITEM "Щарр\t4", ID_OP_SCHARR
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Оригинал\tCtrl+O", ID_EF_ORIGINAL
|
MENUITEM "&Оригинал\tCtrl+O", ID_EF_ORIGINAL
|
||||||
MENUITEM "О&ттенки серого\tCtrl+G", ID_EF_GRAYSCALE
|
MENUITEM "О&ттенки серого\tCtrl+G", ID_EF_GRAYSCALE
|
||||||
@ -83,15 +84,16 @@ END
|
|||||||
|
|
||||||
IDR_MAINACCELERATOR ACCELERATORS
|
IDR_MAINACCELERATOR ACCELERATORS
|
||||||
BEGIN
|
BEGIN
|
||||||
|
"1", ID_OP_ROBERTS, VIRTKEY, NOINVERT
|
||||||
|
"2", ID_OP_PREWITT, VIRTKEY, NOINVERT
|
||||||
|
"3", ID_OP_SOBEL, VIRTKEY, NOINVERT
|
||||||
|
"4", ID_OP_SCHARR, VIRTKEY, NOINVERT
|
||||||
"G", ID_EF_GRAYSCALE, VIRTKEY, CONTROL, NOINVERT
|
"G", ID_EF_GRAYSCALE, VIRTKEY, CONTROL, NOINVERT
|
||||||
"I", ID_EF_INVERSE, VIRTKEY, CONTROL, NOINVERT
|
"I", ID_EF_INVERSE, VIRTKEY, CONTROL, NOINVERT
|
||||||
"O", ID_EF_ORIGINAL, VIRTKEY, CONTROL, NOINVERT
|
"O", ID_EF_ORIGINAL, VIRTKEY, CONTROL, NOINVERT
|
||||||
VK_F4, ID_EXIT, VIRTKEY, ALT, NOINVERT
|
|
||||||
"2", ID_OP_PREWITT, VIRTKEY, NOINVERT
|
|
||||||
"1", ID_OP_ROBERTS, VIRTKEY, NOINVERT
|
|
||||||
"3", ID_OP_SOBEL, VIRTKEY, NOINVERT
|
|
||||||
VK_F9, ID_SNAPSHOT, VIRTKEY, NOINVERT
|
|
||||||
"P", ID_PAUSE, VIRTKEY, CONTROL, NOINVERT
|
"P", ID_PAUSE, VIRTKEY, CONTROL, NOINVERT
|
||||||
|
VK_F4, ID_EXIT, VIRTKEY, ALT, NOINVERT
|
||||||
|
VK_F9, ID_SNAPSHOT, VIRTKEY, NOINVERT
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#include "EdgeDetector.h"
|
#include "EdgeDetector.h"
|
||||||
|
|
||||||
|
int EdgeDetector::captureIndex = 0;
|
||||||
|
|
||||||
EdgeDetector::EdgeDetector() {}
|
EdgeDetector::EdgeDetector() {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -57,7 +59,10 @@ void EdgeDetector::update() {
|
|||||||
*/
|
*/
|
||||||
void EdgeDetector::snapshot() {
|
void EdgeDetector::snapshot() {
|
||||||
if (resultFrame == NULL) return;
|
if (resultFrame == NULL) return;
|
||||||
cvSaveImage("Capture.jpg", resultFrame);
|
char filename[20];
|
||||||
|
sprintf(filename, "Capture%d.jpg", captureIndex);
|
||||||
|
captureIndex++;
|
||||||
|
cvSaveImage(filename, resultFrame);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -91,6 +96,9 @@ void EdgeDetector::setOperator(UINT typeOperator) {
|
|||||||
case ID_OP_SOBEL:
|
case ID_OP_SOBEL:
|
||||||
edgeDetectOperator = new SobelOperator();
|
edgeDetectOperator = new SobelOperator();
|
||||||
break;
|
break;
|
||||||
|
case ID_OP_SCHARR:
|
||||||
|
edgeDetectOperator = new ScharrOperator();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
edgeDetectOperator->createMatrix();
|
edgeDetectOperator->createMatrix();
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include "RobertsOperator.h"
|
#include "RobertsOperator.h"
|
||||||
#include "PrewittOperator.h"
|
#include "PrewittOperator.h"
|
||||||
#include "SobelOperator.h"
|
#include "SobelOperator.h"
|
||||||
|
#include "ScharrOperator.h"
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -32,6 +33,7 @@ private:
|
|||||||
const char* getWindowName();
|
const char* getWindowName();
|
||||||
|
|
||||||
bool isOriginalEffect, isGrayScaleEffect, isInverseEffect;
|
bool isOriginalEffect, isGrayScaleEffect, isInverseEffect;
|
||||||
|
static int captureIndex;
|
||||||
AbstractOperator* edgeDetectOperator;
|
AbstractOperator* edgeDetectOperator;
|
||||||
CvCapture* camera;
|
CvCapture* camera;
|
||||||
CvSize imageSize;
|
CvSize imageSize;
|
||||||
|
29
src/Main.cpp
29
src/Main.cpp
@ -49,7 +49,11 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmd
|
|||||||
UpdateWindow(wnd.getWindow());
|
UpdateWindow(wnd.getWindow());
|
||||||
DrawMenuBar(wnd.getWindow());
|
DrawMenuBar(wnd.getWindow());
|
||||||
|
|
||||||
detector.init(CV_CAP_ANY);
|
// Парсинг командной строки
|
||||||
|
int deviceNumber = (lpszCmdParam == "") ? 0 : atoi(lpszCmdParam);
|
||||||
|
|
||||||
|
// Инициализация детектора граней
|
||||||
|
detector.init(deviceNumber);
|
||||||
|
|
||||||
MSG msg;
|
MSG msg;
|
||||||
while(GetMessage(&msg, NULL, 0, 0)) {
|
while(GetMessage(&msg, NULL, 0, 0)) {
|
||||||
@ -134,19 +138,6 @@ void menuCommandSelected(HWND hWnd, UINT wParam) {
|
|||||||
setPause(hWnd, !pause);
|
setPause(hWnd, !pause);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ID_OP_ROBERTS:
|
|
||||||
case ID_OP_PREWITT:
|
|
||||||
case ID_OP_SOBEL:
|
|
||||||
setOperatorType(hWnd, command);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ID_EF_ORIGINAL:
|
|
||||||
case ID_EF_GRAYSCALE:
|
|
||||||
case ID_EF_INVERSE:
|
|
||||||
effectsEnabled[EFFECTS_END - command] = !effectsEnabled[EFFECTS_END - command];
|
|
||||||
setEffectTypes(hWnd);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ID_ABOUT:
|
case ID_ABOUT:
|
||||||
DialogBox(NULL, MAKEINTRESOURCE(IDD_ABOUT_DIALOG), hWnd, (DLGPROC)AboutDialogProc);
|
DialogBox(NULL, MAKEINTRESOURCE(IDD_ABOUT_DIALOG), hWnd, (DLGPROC)AboutDialogProc);
|
||||||
break;
|
break;
|
||||||
@ -154,6 +145,14 @@ void menuCommandSelected(HWND hWnd, UINT wParam) {
|
|||||||
case ID_EXIT:
|
case ID_EXIT:
|
||||||
SendMessage(hWnd, WM_CLOSE, NULL, NULL);
|
SendMessage(hWnd, WM_CLOSE, NULL, NULL);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
if ( (command >= OPERATORS_START) && (command <= OPERATORS_END) ) {
|
||||||
|
setOperatorType(hWnd, command);
|
||||||
|
} else if ( (command >= EFFECTS_START) && (command <= EFFECTS_END) ) {
|
||||||
|
effectsEnabled[EFFECTS_END - command] = !effectsEnabled[EFFECTS_END - command];
|
||||||
|
setEffectTypes(hWnd);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,7 +163,7 @@ void setPause(HWND hWnd, bool _pause) {
|
|||||||
pause = _pause;
|
pause = _pause;
|
||||||
HMENU cameraMenu = GetSubMenu(GetMenu(hWnd), 0);
|
HMENU cameraMenu = GetSubMenu(GetMenu(hWnd), 0);
|
||||||
ULONG check = pause ? MF_CHECKED : MF_UNCHECKED;
|
ULONG check = pause ? MF_CHECKED : MF_UNCHECKED;
|
||||||
CheckMenuItem(cameraMenu, 1, check);
|
CheckMenuItem(cameraMenu, ID_PAUSE, check);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
22
src/ScharrOperator.h
Normal file
22
src/ScharrOperator.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "AbstractOperator.h"
|
||||||
|
|
||||||
|
class ScharrOperator : public AbstractOperator {
|
||||||
|
|
||||||
|
public:
|
||||||
|
void createHorizontalKernelMatrix() {
|
||||||
|
float matrix[9] = { 3, 0, -3,
|
||||||
|
10, 0, -10,
|
||||||
|
3, 0, -3 };
|
||||||
|
horizontalMatrix = cvCreateMat(3, 3, CV_32FC1);
|
||||||
|
horizontalMatrix = setupKernelMatrixFromArray(horizontalMatrix, matrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
void createVerticalKernelMatrix() {
|
||||||
|
float matrix[9] = { 3, 10, 3,
|
||||||
|
0, 0, 0,
|
||||||
|
-3,-10,-3 };
|
||||||
|
verticalMatrix = cvCreateMat(3, 3, CV_32FC1);
|
||||||
|
verticalMatrix = setupKernelMatrixFromArray(verticalMatrix, matrix);
|
||||||
|
}
|
||||||
|
};
|
@ -12,23 +12,27 @@
|
|||||||
#define ID_EXIT 40002
|
#define ID_EXIT 40002
|
||||||
#define ID_ABOUT 40003
|
#define ID_ABOUT 40003
|
||||||
#define ID_PAUSE 40004
|
#define ID_PAUSE 40004
|
||||||
|
|
||||||
#define OPERATORS_START 40010
|
#define OPERATORS_START 40010
|
||||||
#define ID_OP_ROBERTS 40010
|
#define ID_OP_ROBERTS 40010
|
||||||
#define ID_OP_PREWITT 40011
|
#define ID_OP_PREWITT 40011
|
||||||
#define ID_OP_SOBEL 40012
|
#define ID_OP_SOBEL 40012
|
||||||
#define OPERATORS_END 40012
|
#define ID_OP_SCHARR 40013
|
||||||
|
#define OPERATORS_END 40013
|
||||||
|
|
||||||
#define EFFECTS_START 40018
|
#define EFFECTS_START 40018
|
||||||
#define ID_EF_ORIGINAL 40018
|
#define ID_EF_ORIGINAL 40018
|
||||||
#define ID_EF_GRAYSCALE 40019
|
#define ID_EF_GRAYSCALE 40019
|
||||||
#define ID_EF_INVERSE 40020
|
#define ID_EF_INVERSE 40020
|
||||||
#define EFFECTS_END 40020
|
#define EFFECTS_END 40020
|
||||||
|
|
||||||
|
|
||||||
// Next default values for new objects
|
// Next default values for new objects
|
||||||
//
|
//
|
||||||
#ifdef APSTUDIO_INVOKED
|
#ifdef APSTUDIO_INVOKED
|
||||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 106
|
#define _APS_NEXT_RESOURCE_VALUE 106
|
||||||
#define _APS_NEXT_COMMAND_VALUE 40035
|
#define _APS_NEXT_COMMAND_VALUE 40039
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1003
|
#define _APS_NEXT_CONTROL_VALUE 1003
|
||||||
#define _APS_NEXT_SYMED_VALUE 101
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user