init
parent
455fca94cf
commit
ffb4422845
@ -0,0 +1,155 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>16.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{4e634dd5-c0f9-4220-8974-6c607649af61}</ProjectGuid>
|
||||
<RootNamespace>My08SVM</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<PublicIncludeDirectories>
|
||||
</PublicIncludeDirectories>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>C:\opencv-4.6.0_X64\build\include</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalLibraryDirectories>C:\opencv-4.6.0_X64\build\x64\vc15\lib</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>opencv_world460d.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>C:\opencv-4.6.0_X64\build\include</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalLibraryDirectories>C:\opencv-4.6.0_X64\build\x64\vc15\lib</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>opencv_world460.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="svm_hog.cpp" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="소스 파일">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="헤더 파일">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="리소스 파일">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="svm_hog.cpp">
|
||||
<Filter>소스 파일</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup />
|
||||
</Project>
|
Binary file not shown.
After Width: | Height: | Size: 704 KiB |
@ -0,0 +1,209 @@
|
||||
#include <opencv2/opencv.hpp>
|
||||
#include <opencv2/core/utility.hpp>
|
||||
#include <opencv2/imgproc.hpp>
|
||||
#include <opencv2/highgui.hpp>
|
||||
//#include <ppencv2/features2d.hpp>
|
||||
|
||||
#include <iostream>
|
||||
#include <algorithm>
|
||||
|
||||
using namespace std;
|
||||
using namespace cv;
|
||||
using namespace cv::ml;
|
||||
|
||||
void svmplane()
|
||||
{
|
||||
Mat train = Mat_<float>({ 8, 2 },
|
||||
{
|
||||
150, 200, 200, 250, 100, 250, 150, 300,
|
||||
350, 100, 400, 200, 400, 300, 350, 400 });
|
||||
Mat label = Mat_<int>({ 8, 1 }, { 0, 0, 0, 0, 1, 1, 1, 1 });
|
||||
|
||||
Ptr<SVM> svm = SVM::create();
|
||||
svm->setType(SVM::Types::C_SVC);
|
||||
svm->setKernel(SVM::KernelTypes::RBF);
|
||||
svm->trainAuto(train, ROW_SAMPLE, label);
|
||||
Mat img = Mat::zeros(Size(500, 500), CV_8UC3);
|
||||
|
||||
for (int j = 0; j < img.rows; j++)
|
||||
{
|
||||
for (int i = 0; i < img.cols; i++)
|
||||
{
|
||||
Mat test = Mat_<float>({ 1, 2 }, { (float)i, (float)j });
|
||||
int res = cvRound(svm->predict(test));
|
||||
if (res == 0)
|
||||
img.at<Vec3b>(j, i) = Vec3b(128, 128, 255); // R
|
||||
else
|
||||
img.at<Vec3b>(j, i) = Vec3b(128, 255, 128); // G
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < train.rows; i++)
|
||||
{
|
||||
int x = cvRound(train.at<float>(i, 0));
|
||||
int y = cvRound(train.at<float>(i, 1));
|
||||
int l = label.at<int>(i, 0);
|
||||
if (1 == 0)
|
||||
circle(img, Point(x, y), 5, Scalar(0, 0, 128), -1, LINE_AA); // R
|
||||
else
|
||||
circle(img, Point(x, y), 5, Scalar(0, 128, 0), -1, LINE_AA); // G
|
||||
}
|
||||
|
||||
imshow("svm", img);
|
||||
imwrite("svm_result1.png", img);
|
||||
waitKey();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// //
|
||||
Ptr<SVM> train_hog_svm(const HOGDescriptor& hog);
|
||||
void on_mouse(int event, int X, int y, int flags, void* userdata);
|
||||
|
||||
void svmdigits()
|
||||
{
|
||||
#if _DEBUG
|
||||
cout << "svndigits.exe should be built as Release mode !" << endl;
|
||||
return;
|
||||
#endif
|
||||
|
||||
HOGDescriptor hog(Size(20, 20), Size(10, 10), Size(5, 5), Size(5, 5), 9);
|
||||
Ptr<SVM> svm = train_hog_svm(hog);
|
||||
|
||||
if (svm.empty())
|
||||
{
|
||||
cerr << "Training failed! " << endl;
|
||||
return;
|
||||
}
|
||||
|
||||
Mat img = Mat::zeros(400, 400, CV_8U);
|
||||
imshow("img", img);
|
||||
setMouseCallback("img", on_mouse, (void*)&img);
|
||||
|
||||
while (true)
|
||||
{
|
||||
int c = waitKey();
|
||||
|
||||
if (c == 27)
|
||||
break;
|
||||
else if (c == ' ')
|
||||
{
|
||||
Mat img_resize;
|
||||
resize(img, img_resize, Size(20, 20), 0, 0, INTER_AREA);
|
||||
|
||||
vector<float> desc;
|
||||
hog.compute(img_resize, desc);
|
||||
Mat desc_mat(desc);
|
||||
int res = cvRound(svm->predict(desc_mat.t()));
|
||||
cout << res << endl;
|
||||
|
||||
img.setTo(0);
|
||||
imshow("img", img);
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
Ptr<SVM> train_hog_svm(const HOGDescriptor& hog)
|
||||
{
|
||||
Mat digits = imread("digits.png", IMREAD_GRAYSCALE);
|
||||
|
||||
if (digits.empty())
|
||||
{
|
||||
cerr << "Image load failed!" << endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
Mat train_hog, train_labels;
|
||||
|
||||
for (int j = 0; j < 50; j++)
|
||||
{
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
Mat roi = digits(Rect(i * 20, j * 20, 20, 20));
|
||||
vector<float> desc;
|
||||
|
||||
hog.compute(roi, desc);
|
||||
Mat desc_mat(desc);
|
||||
|
||||
train_hog.push_back(desc_mat.t());
|
||||
train_labels.push_back(j / 5);
|
||||
}
|
||||
}
|
||||
|
||||
Ptr<SVM> svm = SVM::create();
|
||||
svm->setType(SVM::Types::C_SVC);
|
||||
svm->setKernel(SVM::KernelTypes::RBF);
|
||||
svm->setC(2.5);
|
||||
svm->setGamma(0.50625);
|
||||
svm->train(train_hog, ROW_SAMPLE, train_labels);
|
||||
|
||||
return svm;
|
||||
}
|
||||
|
||||
Point ptPrev(-1, -1);
|
||||
void on_mouse(int event, int x, int y, int flags, void* userdata)
|
||||
{
|
||||
Mat img = *(Mat*)userdata;
|
||||
|
||||
if (event == EVENT_LBUTTONDOWN)
|
||||
{
|
||||
ptPrev = Point(x, y);
|
||||
}
|
||||
else if (event == EVENT_LBUTTONUP)
|
||||
{
|
||||
ptPrev = Point(-1, -1);
|
||||
}
|
||||
else if (event == EVENT_MOUSEMOVE && (flags & EVENT_FLAG_LBUTTON))
|
||||
{
|
||||
line(img, ptPrev, Point(x, y), Scalar::all(255), 40, LINE_AA, 0);
|
||||
ptPrev = Point(x, y);
|
||||
imshow("img", img);
|
||||
imwrite("svm_result2.png", img);
|
||||
}
|
||||
}
|
||||
|
||||
// //
|
||||
void hog()
|
||||
{
|
||||
VideoCapture cap("vtest.avi");
|
||||
if (!cap.isOpened())
|
||||
{
|
||||
cerr << "Video open failed!" << endl;
|
||||
return;
|
||||
}
|
||||
|
||||
HOGDescriptor hog;
|
||||
hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
|
||||
|
||||
Mat frame;
|
||||
while (true)
|
||||
{
|
||||
cap >> frame;
|
||||
if (frame.empty())
|
||||
break;
|
||||
|
||||
vector<Rect> detected;
|
||||
hog.detectMultiScale(frame, detected);
|
||||
|
||||
for (Rect r : detected) {
|
||||
Scalar c = Scalar(rand() % 256, rand() % 256, rand() % 256);
|
||||
rectangle(frame, r, c, 3);
|
||||
}
|
||||
|
||||
imshow("frame", frame);
|
||||
|
||||
if (waitKey(10) == 27)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
svmplane();
|
||||
svmdigits();
|
||||
//hog();
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 6.2 KiB |
Binary file not shown.
After Width: | Height: | Size: 4.3 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue