<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>나중에 보려고 정리한 내용</title>
    <link>https://yypark.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sat, 4 Jul 2026 23:52:24 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>park__</managingEditor>
    <item>
      <title>Github 초기 본인 PC 폴더 올리는 법</title>
      <link>https://yypark.tistory.com/89</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;초기 github repositories 를 생성한 후, 본인 PC 폴더 Push 하는 명령어&lt;/p&gt;
&lt;pre id=&quot;code_1768783829847&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git init



git status

# 어떤 파일들이 있는지 확인



git add .

# 현재 cmd 경로에 있는 모든 파일 스테이징



git commit -m &quot;커밋 내용&quot;

# commit



git branch -M main

# 이미 했으면 안해도 됨



git push -u origin main&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>기타</category>
      <category>git</category>
      <author>park__</author>
      <guid isPermaLink="true">https://yypark.tistory.com/89</guid>
      <comments>https://yypark.tistory.com/89#entry89comment</comments>
      <pubDate>Mon, 19 Jan 2026 09:50:48 +0900</pubDate>
    </item>
    <item>
      <title>VTK 라이브러리 설치 (windows 11)</title>
      <link>https://yypark.tistory.com/86</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;VTK(&lt;/b&gt;&lt;b&gt;Visualization Toolkit) - &lt;/b&gt;&lt;b&gt;3D 컴퓨터 그래픽&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot;&gt;과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;데이터 시각화&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot;&gt;를 위한 오픈소스 라이브러리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot;&gt;사이트 : &lt;a href=&quot;https://github.com/Kitware/VTK&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Kitware/VTK&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353638;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;1) git 클론&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353638;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;git clone &lt;a href=&quot;https://github.com/Kitware/VTK.git&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Kitware/VTK.git&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353638;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;2) build 폴더 생성&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353638;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;mkdir VTK-build&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353638;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;3) CMake로 VTK 빌드 설정&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 3-1) CMake GUI 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 3-2) Where is the source code : C:/Git/VTK&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Where to build the binaries : C:/Git/VTK/VTK-build&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 3-3) Configure 버튼 클릭&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Generator 는 사용하는 Visual Studio에 맞게 선택&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 예 : &quot;Visual Studio 17 2022&quot;, &quot;x64&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 3-4) CMAKE_INSTALL_PREFIX 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 예 : C:/Git/VTK/VTK-install&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 선택) 샘플 : VTK_BUILD_EXAMPLES 체크&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 3-5) 다시 configure -&amp;gt; error 없으면 Generate&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) VTK 솔루션 (Debug/Release) 빌드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 4-1) ALL_BUILD 프로젝트 -&amp;gt; 빌드 (C:/Git/VTK/VTK-build/bin/(Debug/Release) 위치에 dll 생성)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 4-2) INSTALL 프로젝트 -&amp;gt; 빌드 (C:/Git/VTK/VTK-install 위치에 헤더/라이브러리 설치)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5) 설치 후 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;프로젝트 생성 후, VC++ Directories 에서 Include Directories/Library Directories 설정&lt;br /&gt;&amp;nbsp; &amp;nbsp;시스템 환경 변수 -&amp;gt; Dll 경로 추가&lt;/p&gt;
&lt;pre id=&quot;code_1767858400063&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;#ifdef _DEBUG
// Debug
#pragma comment(lib, &quot;vtksys-9.6d.lib&quot;)
#pragma comment(lib, &quot;vtkCommonCore-9.6d.lib&quot;)
#pragma comment(lib, &quot;vtkCommonDataModel-9.6d.lib&quot;)
#pragma comment(lib, &quot;vtkCommonExecutionModel-9.6d.lib&quot;)
#pragma comment(lib, &quot;vtkFiltersSources-9.6d.lib&quot;)
#pragma comment(lib, &quot;vtkRenderingCore-9.6d.lib&quot;)
#pragma comment(lib, &quot;vtkRenderingOpenGL2-9.6d.lib&quot;)
#pragma comment(lib, &quot;vtkRenderingVolumeOpenGL2-9.6d.lib&quot;)
#pragma comment(lib, &quot;vtkImagingCore-9.6d.lib&quot;)
#pragma comment(lib, &quot;vtkImagingSources-9.6d.lib&quot;)
#else
// Release
#pragma comment(lib, &quot;vtksys-9.6.lib&quot;)
#pragma comment(lib, &quot;vtkCommonCore-9.6.lib&quot;)
#pragma comment(lib, &quot;vtkCommonDataModel-9.6.lib&quot;)
#pragma comment(lib, &quot;vtkCommonExecutionModel-9.6.lib&quot;)
#pragma comment(lib, &quot;vtkFiltersSources-9.6.lib&quot;)
#pragma comment(lib, &quot;vtkRenderingCore-9.6.lib&quot;)
#pragma comment(lib, &quot;vtkRenderingOpenGL2-9.6.lib&quot;)
#pragma comment(lib, &quot;vtkRenderingVolumeOpenGL2-9.6.lib&quot;)
#pragma comment(lib, &quot;vtkImagingCore-9.6.lib&quot;)
#pragma comment(lib, &quot;vtkImagingSources-9.6.lib&quot;)
#endif

#include &amp;lt;vtkAutoInit.h&amp;gt;  // ★ 모듈 초기화용
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
// (원하면 마우스 인터랙션용 모듈도 추가 가능)
// VTK_MODULE_INIT(vtkInteractionStyle);

#include &amp;lt;vtkSmartPointer.h&amp;gt;
#include &amp;lt;vtkRTAnalyticSource.h&amp;gt;        // 테스트용 3D 볼륨 생성
#include &amp;lt;vtkSmartVolumeMapper.h&amp;gt;
#include &amp;lt;vtkVolumeProperty.h&amp;gt;
#include &amp;lt;vtkColorTransferFunction.h&amp;gt;
#include &amp;lt;vtkPiecewiseFunction.h&amp;gt;
#include &amp;lt;vtkRenderer.h&amp;gt;
#include &amp;lt;vtkRenderWindow.h&amp;gt;
#include &amp;lt;vtkRenderWindowInteractor.h&amp;gt;
#include &amp;lt;vtkVolume.h&amp;gt;

int main()
{
    // 1) 예제용 3D 볼륨 데이터 생성 (vtkRTAnalyticSource)
    auto source = vtkSmartPointer&amp;lt;vtkRTAnalyticSource&amp;gt;::New();
    source-&amp;gt;SetWholeExtent(-128, 128, -128, 128, -128, 128);
    source-&amp;gt;Update();

    // 2) 볼륨 매퍼
    auto volumeMapper = vtkSmartPointer&amp;lt;vtkSmartVolumeMapper&amp;gt;::New();
    volumeMapper-&amp;gt;SetInputConnection(source-&amp;gt;GetOutputPort());

    // 3) 색상(컬러맵) 설정
    auto colorFunc = vtkSmartPointer&amp;lt;vtkColorTransferFunction&amp;gt;::New();
    colorFunc-&amp;gt;AddRGBPoint(70.0, 0.0, 0.0, 0.0);
    colorFunc-&amp;gt;AddRGBPoint(110.0, 0.9, 0.2, 0.3);
    colorFunc-&amp;gt;AddRGBPoint(130.0, 1.0, 1.0, 0.9);

    // 4) 투명도(Opacity) 설정
    auto opacityFunc = vtkSmartPointer&amp;lt;vtkPiecewiseFunction&amp;gt;::New();
    opacityFunc-&amp;gt;AddPoint(70.0, 0.0);
    opacityFunc-&amp;gt;AddPoint(100.0, 0.2);
    opacityFunc-&amp;gt;AddPoint(130.0, 0.8);

    auto volumeProperty = vtkSmartPointer&amp;lt;vtkVolumeProperty&amp;gt;::New();
    volumeProperty-&amp;gt;SetColor(colorFunc);
    volumeProperty-&amp;gt;SetScalarOpacity(opacityFunc);
    volumeProperty-&amp;gt;ShadeOn();
    volumeProperty-&amp;gt;SetInterpolationTypeToLinear();

    // 5) Volume 액터
    auto volume = vtkSmartPointer&amp;lt;vtkVolume&amp;gt;::New();
    volume-&amp;gt;SetMapper(volumeMapper);
    volume-&amp;gt;SetProperty(volumeProperty);

    // 6) 렌더러 / 윈도우 / 인터랙터
    auto renderer = vtkSmartPointer&amp;lt;vtkRenderer&amp;gt;::New();
    renderer-&amp;gt;AddVolume(volume);
    renderer-&amp;gt;SetBackground(0.1, 0.1, 0.2);

    auto renderWindow = vtkSmartPointer&amp;lt;vtkRenderWindow&amp;gt;::New();
    renderWindow-&amp;gt;AddRenderer(renderer);
    renderWindow-&amp;gt;SetSize(800, 600);

    auto interactor = vtkSmartPointer&amp;lt;vtkRenderWindowInteractor&amp;gt;::New();
    interactor-&amp;gt;SetRenderWindow(renderWindow);

    renderer-&amp;gt;ResetCamera();
    renderWindow-&amp;gt;Render();
    interactor-&amp;gt;Start();

    return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>기타</category>
      <author>park__</author>
      <guid isPermaLink="true">https://yypark.tistory.com/86</guid>
      <comments>https://yypark.tistory.com/86#entry86comment</comments>
      <pubDate>Thu, 8 Jan 2026 16:47:21 +0900</pubDate>
    </item>
    <item>
      <title>OpenCV 빌드 정보 및 CPU/GPU 관련 외부 라이브러리 사용 여부 보는 법</title>
      <link>https://yypark.tistory.com/85</link>
      <description>&lt;pre id=&quot;code_1767165997117&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    std::cout &amp;lt;&amp;lt; cv::getBuildInformation() &amp;lt;&amp;lt; std::endl;

    std::cout &amp;lt;&amp;lt; &quot;IPP available (built with IPP): &quot; &amp;lt;&amp;lt; cv::ipp::useIPP() &amp;lt;&amp;lt; std::endl;

    cv::ipp::setUseIPP(false);  // disable temporarily
    std::cout &amp;lt;&amp;lt; &quot;IPP enabled (current setting): &quot; &amp;lt;&amp;lt; cv::ipp::useIPP() &amp;lt;&amp;lt; std::endl;

    std::cout &amp;lt;&amp;lt; &quot;OpenCL available (built &amp;amp; runtime): &quot; &amp;lt;&amp;lt; cv::ocl::haveOpenCL() &amp;lt;&amp;lt; std::endl;
    std::cout &amp;lt;&amp;lt; &quot;OpenCL enabled (current setting): &quot; &amp;lt;&amp;lt; cv::ocl::useOpenCL() &amp;lt;&amp;lt; std::endl;

    if (cv::ocl::haveOpenCL()) {
        cv::ocl::Context ctx;
        if (ctx.create(cv::ocl::Device::TYPE_GPU)) {
            std::cout &amp;lt;&amp;lt; &quot;GPU device count: &quot; &amp;lt;&amp;lt; ctx.ndevices() &amp;lt;&amp;lt; std::endl;
            std::cout &amp;lt;&amp;lt; &quot;First device name: &quot; &amp;lt;&amp;lt; ctx.device(0).name() &amp;lt;&amp;lt; std::endl;
        }
    }

    std::cout &amp;lt;&amp;lt; &quot;AVX support:   &quot; &amp;lt;&amp;lt; cv::checkHardwareSupport(CPU_AVX) &amp;lt;&amp;lt; std::endl;
    std::cout &amp;lt;&amp;lt; &quot;AVX2 support:  &quot; &amp;lt;&amp;lt; cv::checkHardwareSupport(CPU_AVX2) &amp;lt;&amp;lt; std::endl;
    std::cout &amp;lt;&amp;lt; &quot;SSE4.2 support:&quot; &amp;lt;&amp;lt; cv::checkHardwareSupport(CPU_SSE4_2) &amp;lt;&amp;lt; std::endl;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>기타</category>
      <author>park__</author>
      <guid isPermaLink="true">https://yypark.tistory.com/85</guid>
      <comments>https://yypark.tistory.com/85#entry85comment</comments>
      <pubDate>Wed, 31 Dec 2025 16:26:42 +0900</pubDate>
    </item>
    <item>
      <title>OpenCV 내부 코드 디버깅 하면서 보는 방법</title>
      <link>https://yypark.tistory.com/84</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1) 해당 사이트에서 clone&lt;br /&gt;git&amp;nbsp;clone&amp;nbsp;https://github.com/opencv/opencv.git&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) clone 해온 폴더에서 build, visual studio 2019 c++17&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mkdir&amp;nbsp;build-debug&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cd&amp;nbsp;build-debug&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cmake&amp;nbsp;-S&amp;nbsp;..&amp;nbsp;-B&amp;nbsp;.&amp;nbsp;^&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;-G&amp;nbsp;&quot;Visual&amp;nbsp;Studio&amp;nbsp;16&amp;nbsp;2019&quot;&amp;nbsp;-A&amp;nbsp;x64&amp;nbsp;^&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;-DCMAKE_BUILD_TYPE=Debug&amp;nbsp;^&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;-DCMAKE_CXX_STANDARD=17&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cmake&amp;nbsp;--build&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2-1) CMake에서 AVIF 끄기 &lt;br /&gt;cmake-gui&amp;nbsp;실행. &lt;br /&gt;Where&amp;nbsp;is&amp;nbsp;the&amp;nbsp;source&amp;nbsp;code: &lt;br /&gt;C:/Git/opencv &lt;br /&gt;Where&amp;nbsp;to&amp;nbsp;build&amp;nbsp;the&amp;nbsp;binaries: &lt;br /&gt;C:/Git/opencv/build-debug &lt;br /&gt;Configure&amp;nbsp;버튼&amp;nbsp;클릭&amp;nbsp;(이미&amp;nbsp;했던&amp;nbsp;빌드라도&amp;nbsp;다시&amp;nbsp;해도&amp;nbsp;됩니다). &lt;br /&gt;상단&amp;nbsp;검색창에&amp;nbsp;AVIF&amp;nbsp;입력. &lt;br /&gt;WITH_AVIF&amp;nbsp;옵션&amp;nbsp;체크가&amp;nbsp;되어&amp;nbsp;있으면&amp;nbsp;체크&amp;nbsp;해제(OFF). &lt;br /&gt;다시&amp;nbsp;Configure&amp;nbsp;&amp;rarr;&amp;nbsp;오류&amp;nbsp;없으면&amp;nbsp;Generate&amp;nbsp;클릭.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) OpenCV.sln 켜서 build&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 환경 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Visual Studio 프로젝트 설정 (ImageProcessingTEST) &lt;br /&gt;구성:&amp;nbsp;Debug,&amp;nbsp;플랫폼:&amp;nbsp;x64&amp;nbsp;기준으로&amp;nbsp;설명합니다. &lt;br /&gt;1-1. Include 디렉터리 설정 &lt;br /&gt;솔루션&amp;nbsp;탐색기에서&amp;nbsp;ImageProcessingTEST&amp;nbsp;프로젝트&amp;nbsp;우클릭&amp;nbsp;&amp;rarr;&amp;nbsp;속성. &lt;br /&gt;좌측&amp;nbsp;상단에서&amp;nbsp;구성:&amp;nbsp;Debug,&amp;nbsp;플랫폼:&amp;nbsp;x64&amp;nbsp;인지&amp;nbsp;확인. &lt;br /&gt;C/C++&amp;nbsp;&amp;rarr;&amp;nbsp;일반&amp;nbsp;&amp;rarr;&amp;nbsp;추가&amp;nbsp;포함&amp;nbsp;디렉터리에&amp;nbsp;다음&amp;nbsp;경로를&amp;nbsp;추가합니다. &lt;br /&gt;C:\Git\opencv\build-debug &lt;br /&gt;C:\Git\opencv\include&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C:\Git\opencv\modules\core\include &lt;br /&gt;C:\Git\opencv\modules\imgproc\include &lt;br /&gt;C:\Git\opencv\modules\highgui\include &lt;br /&gt;C:\Git\opencv\modules\imgcodecs\include &lt;br /&gt;C:\Git\opencv\modules\videoio\include &lt;br /&gt;C:\Git\opencv\modules\video\include &lt;br /&gt;C:\Git\opencv\modules\calib3d\include &lt;br /&gt;C:\Git\opencv\modules\features2d\include &lt;br /&gt;C:\Git\opencv\modules\flann\include &lt;br /&gt;C:\Git\opencv\modules\gapi\include &lt;br /&gt;C:\Git\opencv\modules\ml\include &lt;br /&gt;C:\Git\opencv\modules\objdetect\include &lt;br /&gt;C:\Git\opencv\modules\photo\include &lt;br /&gt;C:\Git\opencv\modules\stitching\include &lt;br /&gt;C:\Git\opencv\modules\dnn\include&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1-2. 라이브러리 디렉터리 설정 &lt;br /&gt;같은&amp;nbsp;속성&amp;nbsp;창에서&amp;nbsp;링커&amp;nbsp;&amp;rarr;&amp;nbsp;일반&amp;nbsp;&amp;rarr;&amp;nbsp;추가&amp;nbsp;라이브러리&amp;nbsp;디렉터리로&amp;nbsp;이동. &lt;br /&gt;여기에&amp;nbsp;OpenCV&amp;nbsp;.lib&amp;nbsp;파일이&amp;nbsp;있는&amp;nbsp;디렉터리를&amp;nbsp;추가합니다. &lt;br /&gt;일반적으로&amp;nbsp;아래&amp;nbsp;중&amp;nbsp;하나입니다&amp;nbsp;(실제로&amp;nbsp;폴더를&amp;nbsp;한&amp;nbsp;번&amp;nbsp;확인해보세요): &lt;br /&gt;C:\Git\opencv\build-debug\lib\Debug &lt;br /&gt;또는&amp;nbsp;C:\Git\opencv\build-debug\lib\Debug &lt;br /&gt;(폴더에&amp;nbsp;opencv_core***d.lib,&amp;nbsp;opencv_imgproc***d.lib&amp;nbsp;같은&amp;nbsp;파일들이&amp;nbsp;있습니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;1-3. 링크할 라이브러리(.lib) 추가 &lt;br /&gt;링커&amp;nbsp;&amp;rarr;&amp;nbsp;입력&amp;nbsp;&amp;rarr;&amp;nbsp;추가&amp;nbsp;종속성에&amp;nbsp;아래&amp;nbsp;중&amp;nbsp;하나를&amp;nbsp;추가합니다. &lt;br /&gt;opencv_world를&amp;nbsp;빌드한&amp;nbsp;경우(가장&amp;nbsp;편함) &lt;br /&gt;opencv_world4xxd.lib&amp;nbsp;(예:&amp;nbsp;opencv_world490d.lib) &lt;br /&gt;모듈별로&amp;nbsp;빌드한&amp;nbsp;경우&amp;nbsp;(world&amp;nbsp;안&amp;nbsp;쓴&amp;nbsp;경우) &lt;br /&gt;opencv_core4xxd.lib &lt;br /&gt;opencv_imgproc4xxd.lib &lt;br /&gt;opencv_highgui4xxd.lib &lt;br /&gt;opencv_imgcodecs4xxd.lib&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1-4. 모든 opencv 관련 dll -&amp;gt; 프로젝트 exe 생성되는 경로로 copy\&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* exe 위치가 다른 곳일 수 있음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* Project 속성 일반에서 Output Directory 에서 변경 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C:\Git\opencv\build-debug\bin\Debug&lt;/p&gt;</description>
      <category>기타</category>
      <author>park__</author>
      <guid isPermaLink="true">https://yypark.tistory.com/84</guid>
      <comments>https://yypark.tistory.com/84#entry84comment</comments>
      <pubDate>Wed, 31 Dec 2025 15:50:38 +0900</pubDate>
    </item>
    <item>
      <title>&amp;lt;CUDA&amp;gt;Median 함수 사용법(16Bit 1Channel 2D Median) - nppiFilterMedian_16u_C1R_Ctx</title>
      <link>https://yypark.tistory.com/83</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;- Cuda nppiFilterMedian_16u_C1R_Ctx 함수를 이용해서, Medain 3x3 사용하는 코드.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 사용 cuda 버전 12.1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 필요 lib&lt;/p&gt;
&lt;pre id=&quot;code_1762322705636&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// NPP 라이브러리 링크 (CUDA 12.x는 모듈별 라이브러리 사용)
#ifdef _WIN64
// CUDA 12.x에서는 모듈별 라이브러리 사용
#pragma comment(lib, &quot;nppif.lib&quot;)      // Image Filtering (미디언 필터 포함)
#pragma comment(lib, &quot;nppc.lib&quot;)       // Core utilities
#else
#pragma comment(lib, &quot;nppif.lib&quot;)
#pragma comment(lib, &quot;nppc.lib&quot;)
#endif&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 사용 코드&lt;/p&gt;
&lt;pre id=&quot;code_1762322619637&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void Median33CUDA(uint16_t* h_input, uint16_t* h_output, int width, int height)
{
	if (width &amp;lt;= 0 || height &amp;lt;= 0) {
		return;
	}

	// GPU 메모리 할당
	Npp16u* d_input = nullptr;
	Npp16u* d_output = nullptr;
	size_t size = width * height * sizeof(Npp16u);

	cudaError_t cudaErr = cudaMalloc((void**)&amp;amp;d_input, size);
	if (cudaErr != cudaSuccess) {
		return;
	}

	cudaErr = cudaMalloc((void**)&amp;amp;d_output, size);
	if (cudaErr != cudaSuccess) {
		cudaFree(d_input);
		return;
	}

	// 입력 데이터를 GPU로 복사
	cudaErr = cudaMemcpy(d_input, h_input, size, cudaMemcpyHostToDevice);
	if (cudaErr != cudaSuccess) {
		cudaFree(d_input);
		cudaFree(d_output);
		return;
	}

	// ROI 및 마스크 설정
	NppiSize oSizeROI = { width, height };
	NppiSize oMaskSize = { 3, 3 };
	NppiPoint oAnchor = { 1, 1 };

	// 스트림 컨텍스트 설정
	NppStreamContext nppStreamCtx;
	nppStreamCtx.hStream = 0;
	
	int deviceId = 0;
	cudaGetDevice(&amp;amp;deviceId);
	nppStreamCtx.nCudaDeviceId = deviceId;
	
	cudaDeviceProp deviceProp;
	cudaGetDeviceProperties(&amp;amp;deviceProp, deviceId);
	
	nppStreamCtx.nMultiProcessorCount = deviceProp.multiProcessorCount;
	nppStreamCtx.nMaxThreadsPerMultiProcessor = deviceProp.maxThreadsPerMultiProcessor;
	nppStreamCtx.nMaxThreadsPerBlock = deviceProp.maxThreadsPerBlock;
	nppStreamCtx.nSharedMemPerBlock = deviceProp.sharedMemPerBlock;
	nppStreamCtx.nCudaDevAttrComputeCapabilityMajor = deviceProp.major;
	nppStreamCtx.nCudaDevAttrComputeCapabilityMinor = deviceProp.minor;

	// 버퍼 크기 계산
	size_t imageSize = width * height * sizeof(Npp16u);
	Npp32u nBufferSize = (Npp32u)imageSize;
	if (nBufferSize &amp;lt; 4096) {
		nBufferSize = 4096;
	}

	// 임시 버퍼 할당
	Npp8u* pBuffer = nullptr;
	cudaErr = cudaMalloc((void**)&amp;amp;pBuffer, nBufferSize);
	if (cudaErr != cudaSuccess) {
		cudaFree(d_input);
		cudaFree(d_output);
		return;
	}

	// 미디언 필터 적용
	Npp32s nSrcStep = width * sizeof(Npp16u);
	Npp32s nDstStep = width * sizeof(Npp16u);

	NppStatus status = nppiFilterMedian_16u_C1R_Ctx(
		d_input, nSrcStep,
		d_output, nDstStep,
		oSizeROI,
		oMaskSize,
		oAnchor,
		pBuffer,
		nppStreamCtx
	);

	if (status != NPP_SUCCESS) {
		cudaFree(d_input);
		cudaFree(d_output);
		cudaFree(pBuffer);
		return;
	}

	// 동기화
	cudaDeviceSynchronize();

	// 결과를 CPU로 복사
	cudaErr = cudaMemcpy(h_output, d_output, size, cudaMemcpyDeviceToHost);
	if (cudaErr != cudaSuccess) {
		cudaFree(d_input);
		cudaFree(d_output);
		cudaFree(pBuffer);
		return;
	}

	// 메모리 해제
	cudaFree(d_input);
	cudaFree(d_output);
	cudaFree(pBuffer);
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>기타</category>
      <author>park__</author>
      <guid isPermaLink="true">https://yypark.tistory.com/83</guid>
      <comments>https://yypark.tistory.com/83#entry83comment</comments>
      <pubDate>Wed, 5 Nov 2025 15:10:29 +0900</pubDate>
    </item>
    <item>
      <title>C++ vector 제곱 합 or 두개의 vector 곱의 합 (std::transform_reduce)</title>
      <link>https://yypark.tistory.com/82</link>
      <description>&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;*C++ 17 부터 지원&lt;/b&gt;&lt;/i&gt;&lt;/u&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;std::transform_reduce&lt;/b&gt;&lt;/i&gt; 함수 사용법 정리&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;헤더 : &amp;lt;execution&amp;gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;형태:&lt;/p&gt;
&lt;pre id=&quot;code_1760331204036&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;std::transform_reduce(
    execution,      	   // (예: std::execution::par)
    first, last,           // 처리할 데이터 범위
    init_value,            // 초기값
    reduce_op,             // Reduce 연산 (예: 덧셈)
    transform_op           // Transform 연산 (예: 제곱)
);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최적화 셋팅 종류 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;std::execution::seq:&amp;nbsp;순차적으로&amp;nbsp;실행&amp;nbsp;(기본값,&amp;nbsp;병렬&amp;nbsp;처리&amp;nbsp;안&amp;nbsp;함) &lt;br /&gt;std::execution::par:&amp;nbsp;여러&amp;nbsp;스레드에서&amp;nbsp;병렬로&amp;nbsp;실행 &lt;br /&gt;std::execution::par_unseq:&amp;nbsp;여러&amp;nbsp;스레드에서&amp;nbsp;병렬로&amp;nbsp;실행하며,&amp;nbsp;벡터화(SIMD)도&amp;nbsp;허용&amp;nbsp;(가장&amp;nbsp;높은&amp;nbsp;수준의&amp;nbsp;최적화)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제곱합 예시 :&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1760331453634&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;numeric&amp;gt;
#include &amp;lt;execution&amp;gt;

int main() {
    std::vector&amp;lt;double&amp;gt; v = {1.0, 2.0, 3.0, 4.0, 5.0};

    // 1. 각 원소를 제곱하고 (transform_op)
    // 2. 그 결과들을 모두 더한다 (reduce_op)
    double sum_of_squares = std::transform_reduce(
        std::execution::par,  // 병렬 실행
        v.begin(), v.end(),
        0.0,                  // 초기값은 0.0
        std::plus&amp;lt;&amp;gt;(),        // 축소 연산: 덧셈
        [](double x) { return x * x; } // 변환 연산: 제곱
    );

    // 결과: 1*1 + 2*2 + 3*3 + 4*4 + 5*5 = 1 + 4 + 9 + 16 + 25 = 55
    std::cout &amp;lt;&amp;lt; &quot;Sum of squares: &quot; &amp;lt;&amp;lt; sum_of_squares &amp;lt;&amp;lt; std::endl;

    return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vector 곱의 합 예시 :&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1760331494820&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;numeric&amp;gt;
#include &amp;lt;execution&amp;gt;

int main() {
    std::vector&amp;lt;double&amp;gt; v1 = {1.0, 2.0, 3.0};
    std::vector&amp;lt;double&amp;gt; v2 = {4.0, 5.0, 6.0};

    // 1. v1과 v2에서 같은 위치의 원소끼리 곱하고 (transform_op)
    // 2. 그 결과들을 모두 더한다 (reduce_op)
    double dot_product = std::transform_reduce(
        std::execution::par,  // 병렬 실행
        v1.begin(), v1.end(),
        v2.begin(),
        0.0,                  // 초기값은 0.0
        std::plus&amp;lt;&amp;gt;(),        // 축소 연산: 덧셈
        std::multiplies&amp;lt;&amp;gt;()   // 변환 연산: 곱셈
    );

    // 결과: (1*4) + (2*5) + (3*6) = 4 + 10 + 18 = 32
    std::cout &amp;lt;&amp;lt; &quot;Dot product: &quot; &amp;lt;&amp;lt; dot_product &amp;lt;&amp;lt; std::endl;

    return 0;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>C++</category>
      <author>park__</author>
      <guid isPermaLink="true">https://yypark.tistory.com/82</guid>
      <comments>https://yypark.tistory.com/82#entry82comment</comments>
      <pubDate>Mon, 13 Oct 2025 13:58:40 +0900</pubDate>
    </item>
    <item>
      <title>SSIM 함수 (Structural Similarity Index Map)</title>
      <link>https://yypark.tistory.com/81</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;img1, img2 가 있을 때, 두 영상의 유사도 비교하여 0~1 사이 값으로 반환해 주는 함수.&lt;/p&gt;
&lt;pre id=&quot;code_1742176446764&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// SSIM 계산 및 차이맵 반환 함수
double calculateSSIM(const Mat&amp;amp; img1, const Mat&amp;amp; img2, Mat&amp;amp; ssim_map) {
const double C1 = 6.5025, C2 = 58.5225;

Mat img1_64F, img2_64F;
img1.convertTo(img1_64F, CV_64F);
img2.convertTo(img2_64F, CV_64F);

// 평균값(Mean) 계산
Mat mu1, mu2;
GaussianBlur(img1_64F, mu1, Size(11, 11), 1.5);
GaussianBlur(img2_64F, mu2, Size(11, 11), 1.5);

// 분산(Variance) 및 공분산(Covariance) 계산
Mat mu1_sq = mu1.mul(mu1);
Mat mu2_sq = mu2.mul(mu2);
Mat mu1_mu2 = mu1.mul(mu2);

Mat sigma1_sq, sigma2_sq, sigma12;
GaussianBlur(img1_64F.mul(img1_64F), sigma1_sq, Size(11, 11), 1.5);
GaussianBlur(img2_64F.mul(img2_64F), sigma2_sq, Size(11, 11), 1.5);
GaussianBlur(img1_64F.mul(img2_64F), sigma12, Size(11, 11), 1.5);

sigma1_sq -= mu1_sq;
sigma2_sq -= mu2_sq;
sigma12 -= mu1_mu2;

// SSIM 공식 적용
Mat numerator = (2 * mu1_mu2 + C1).mul(2 * sigma12 + C2);
Mat denominator = (mu1_sq + mu2_sq + C1).mul(sigma1_sq + sigma2_sq + C2);
divide(numerator, denominator, ssim_map);

// SSIM 평균값 반환
Scalar ssim_mean = mean(ssim_map);
return ssim_mean[0]; // 그레이스케일이므로 한 채널만 사용
}

// SSIM 차이맵 시각화 함수
Mat visualizeSSIM(const Mat&amp;amp; ssim_map) {
Mat ssim_vis;

// SSIM 맵을 0~255 범위로 정규화
ssim_map.convertTo(ssim_vis, CV_8U, 255);

// 컬러맵 적용 (히트맵 스타일)
applyColorMap(ssim_vis, ssim_vis, COLORMAP_JET);

return ssim_vis;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>C++</category>
      <author>park__</author>
      <guid isPermaLink="true">https://yypark.tistory.com/81</guid>
      <comments>https://yypark.tistory.com/81#entry81comment</comments>
      <pubDate>Mon, 17 Mar 2025 10:54:56 +0900</pubDate>
    </item>
    <item>
      <title>어셈블리 명령어 정리</title>
      <link>https://yypark.tistory.com/80</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;MOV&lt;/b&gt;: 데이터를 한 위치에서 다른 위치로 이동&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1737427215914&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MOV AX, 10     ; AX 레지스터에 값 10을 저장
MOV BX, AX     ; BX 레지스터에 AX의 값을 복사&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;ADD&lt;/b&gt;: 두 값을 더함&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1737427258321&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MOV AX, 10     ; AX 레지스터에 값 10을 저장
MOV BX, AX     ; BX 레지스터에 AX의 값을 복사&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;SUB&lt;/b&gt;: 두 값을 뺌&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1737427270513&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SUB AX, BX     ; AX에서 BX의 값을 빼고 그 결과를 AX에 저장
SUB AX, 3      ; AX에서 3을 빼고 그 결과를 AX에 저장&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;CMP&lt;/b&gt;: 두 값을 비교하여 플래그를 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1737427282571&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CMP AX, BX     ; AX와 BX를 비교 (실제로는 AX - BX)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;JMP&lt;/b&gt;: 지정된 위치로 무조건 점프&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1737427350509&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;JMP label     ; label로 무조건 점프&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>기타</category>
      <author>park__</author>
      <guid isPermaLink="true">https://yypark.tistory.com/80</guid>
      <comments>https://yypark.tistory.com/80#entry80comment</comments>
      <pubDate>Tue, 21 Jan 2025 11:42:39 +0900</pubDate>
    </item>
    <item>
      <title>onnxruntime 사용 시 주의사항 - 2</title>
      <link>https://yypark.tistory.com/79</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;class 내부에서 Ort::Env, Ort::MemoryInfo 를 멤버변수로 선언할 때, Class 생성자에서 초기화 리스트 방식으로 사용하여야 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1428&quot; data-origin-height=&quot;143&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IWmNE/btsLIboCBNJ/g5fwQvtZVobDxBHvBAEVW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IWmNE/btsLIboCBNJ/g5fwQvtZVobDxBHvBAEVW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IWmNE/btsLIboCBNJ/g5fwQvtZVobDxBHvBAEVW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIWmNE%2FbtsLIboCBNJ%2Fg5fwQvtZVobDxBHvBAEVW1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1428&quot; height=&quot;143&quot; data-origin-width=&quot;1428&quot; data-origin-height=&quot;143&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 초기화 리스트 방식으로 하지 않을 경우, &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Ort::Env,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Ort::MemoryInfo 가 제대로 선언되지 않습니다.&lt;/p&gt;</description>
      <category>onnxruntime</category>
      <category>ort::env</category>
      <category>ort::memoryinfo</category>
      <category>초기화</category>
      <author>park__</author>
      <guid isPermaLink="true">https://yypark.tistory.com/79</guid>
      <comments>https://yypark.tistory.com/79#entry79comment</comments>
      <pubDate>Fri, 10 Jan 2025 11:23:13 +0900</pubDate>
    </item>
    <item>
      <title>onnxruntime 사용시 주의 사항 - 1</title>
      <link>https://yypark.tistory.com/78</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Class 내부 변수 선언을 아래와 같이 Env가 밑으로 가게 선언할 경우.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;746&quot; data-origin-height=&quot;107&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q9Pjk/btsLIiBlOOi/SDmtBLQs0CAAJeEP67YQF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q9Pjk/btsLIiBlOOi/SDmtBLQs0CAAJeEP67YQF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q9Pjk/btsLIiBlOOi/SDmtBLQs0CAAJeEP67YQF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq9Pjk%2FbtsLIiBlOOi%2FSDmtBLQs0CAAJeEP67YQF0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;746&quot; height=&quot;107&quot; data-origin-width=&quot;746&quot; data-origin-height=&quot;107&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ORT_DEFINE_RELEASE(SessionOptions); 부분에서 오류가 발생합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1197&quot; data-origin-height=&quot;425&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpkrhz/btsLH9EqO9G/UIm5xluEqlkkq3OOBEz4V0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpkrhz/btsLH9EqO9G/UIm5xluEqlkkq3OOBEz4V0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpkrhz/btsLH9EqO9G/UIm5xluEqlkkq3OOBEz4V0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbpkrhz%2FbtsLH9EqO9G%2FUIm5xluEqlkkq3OOBEz4V0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1197&quot; height=&quot;425&quot; data-origin-width=&quot;1197&quot; data-origin-height=&quot;425&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 오류는 Env 변수가 나중에 선언되어 ORT_DEFINE_RELEASE(Env) -&amp;gt; ORT_DEFINE_RELEASE(SessionOptions) 순서로 메모리가 해제되어 발생하는 문제입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEz520/btsLJnhnm00/K5attArbkSEiMozq7Pbx51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEz520/btsLJnhnm00/K5attArbkSEiMozq7Pbx51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEz520/btsLJnhnm00/K5attArbkSEiMozq7Pbx51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEz520%2FbtsLJnhnm00%2FK5attArbkSEiMozq7Pbx51%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;646&quot; height=&quot;102&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;102&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 선언 위치를 바꿔주시면 오류가 해결됩니다.&lt;/p&gt;</description>
      <category>C++</category>
      <category>env</category>
      <category>onnxruntim</category>
      <category>ort_define_release(sessionoptions)</category>
      <author>park__</author>
      <guid isPermaLink="true">https://yypark.tistory.com/78</guid>
      <comments>https://yypark.tistory.com/78#entry78comment</comments>
      <pubDate>Fri, 10 Jan 2025 11:18:27 +0900</pubDate>
    </item>
  </channel>
</rss>