Добавлен оператор Щарра. Добавлен счетчик сохранённых кадров. Исправлен баг - не отмечался пункт меню Пауза.
This commit is contained in:
parent
3e57fbb9d2
commit
cd99ec4268
@ -64,6 +64,7 @@ BEGIN
|
||||
MENUITEM "&Робертс\t1", ID_OP_ROBERTS
|
||||
MENUITEM "&Прюитт\t2", ID_OP_PREWITT
|
||||
MENUITEM "&Собель\t3", ID_OP_SOBEL
|
||||
MENUITEM "Щарр\t4", ID_OP_SCHARR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Оригинал\tCtrl+O", ID_EF_ORIGINAL
|
||||
MENUITEM "О&ттенки серого\tCtrl+G", ID_EF_GRAYSCALE
|
||||
@ -83,15 +84,16 @@ END
|
||||
|
||||
IDR_MAINACCELERATOR ACCELERATORS
|
||||
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
|
||||
"I", ID_EF_INVERSE, 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
|
||||
VK_F4, ID_EXIT, VIRTKEY, ALT, NOINVERT
|
||||
VK_F9, ID_SNAPSHOT, VIRTKEY, NOINVERT
|
||||
END
|
||||
|
||||
|
||||
|
@ -1,5 +1,7 @@
|
||||
#include "EdgeDetector.h"
|
||||
|
||||
int EdgeDetector::captureIndex = 0;
|
||||
|
||||
EdgeDetector::EdgeDetector() {}
|
||||
|
||||
/**
|
||||
@ -57,7 +59,10 @@ void EdgeDetector::update() {
|
||||
*/
|
||||
void EdgeDetector::snapshot() {
|
||||
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:
|
||||
edgeDetectOperator = new SobelOperator();
|
||||
break;
|
||||
case ID_OP_SCHARR:
|
||||
edgeDetectOperator = new ScharrOperator();
|
||||
break;
|
||||
}
|
||||
edgeDetectOperator->createMatrix();
|
||||
}
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include "RobertsOperator.h"
|
||||
#include "PrewittOperator.h"
|
||||
#include "SobelOperator.h"
|
||||
#include "ScharrOperator.h"
|
||||
|
||||
|
||||
/**
|
||||
@ -32,6 +33,7 @@ private:
|
||||
const char* getWindowName();
|
||||
|
||||
bool isOriginalEffect, isGrayScaleEffect, isInverseEffect;
|
||||
static int captureIndex;
|
||||
AbstractOperator* edgeDetectOperator;
|
||||
CvCapture* camera;
|
||||
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());
|
||||
DrawMenuBar(wnd.getWindow());
|
||||
|
||||
detector.init(CV_CAP_ANY);
|
||||
// Парсинг командной строки
|
||||
int deviceNumber = (lpszCmdParam == "") ? 0 : atoi(lpszCmdParam);
|
||||
|
||||
// Инициализация детектора граней
|
||||
detector.init(deviceNumber);
|
||||
|
||||
MSG msg;
|
||||
while(GetMessage(&msg, NULL, 0, 0)) {
|
||||
@ -134,19 +138,6 @@ void menuCommandSelected(HWND hWnd, UINT wParam) {
|
||||
setPause(hWnd, !pause);
|
||||
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:
|
||||
DialogBox(NULL, MAKEINTRESOURCE(IDD_ABOUT_DIALOG), hWnd, (DLGPROC)AboutDialogProc);
|
||||
break;
|
||||
@ -154,6 +145,14 @@ void menuCommandSelected(HWND hWnd, UINT wParam) {
|
||||
case ID_EXIT:
|
||||
SendMessage(hWnd, WM_CLOSE, NULL, NULL);
|
||||
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;
|
||||
HMENU cameraMenu = GetSubMenu(GetMenu(hWnd), 0);
|
||||
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_ABOUT 40003
|
||||
#define ID_PAUSE 40004
|
||||
|
||||
#define OPERATORS_START 40010
|
||||
#define ID_OP_ROBERTS 40010
|
||||
#define ID_OP_PREWITT 40011
|
||||
#define ID_OP_SOBEL 40012
|
||||
#define OPERATORS_END 40012
|
||||
#define ID_OP_SCHARR 40013
|
||||
#define OPERATORS_END 40013
|
||||
|
||||
#define EFFECTS_START 40018
|
||||
#define ID_EF_ORIGINAL 40018
|
||||
#define ID_EF_GRAYSCALE 40019
|
||||
#define ID_EF_INVERSE 40020
|
||||
#define EFFECTS_END 40020
|
||||
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#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_SYMED_VALUE 101
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user