C++ 소멸자에 virtual을 사용하는 이유 virtual 소멸자를 사용하면 다형성을 올바르게 처리할 수 있습니다. 부모 클래스의 포인터를 통해 자식 클래스의 객체를 삭제할 때, 자식 클래스의 소멸자도 호출되어 자원 해제가 올바르게 이루어집니다. 그렇지 않으면 자식 클래스에서 할당한 리소스를 해제하지 못할 수 있습니다. 따라서, 클래스를 상속할 계획이 있는 경우, 특히 동적 메모리를 사용하는 경우 소멸자는 반드시 virtual로 선언해야 합니다. C++ 2024.12.15
C++ virtual 내부 작동 방식 C++ 에서 클래스를 컴파일하면 그 클래스의 모든 메서드를 담은 바이너리 객체가 생성됩니다. 이 때, virtual로 선언되지 않은 메서드를 호출하는 부분을 컴파일 시간에 결정된 타입의 코드로 교체합니다. 이를 정적 바인딩(static binding) 또는 이른 바인딩(early binding)이라 부릅니다. 메서드를 virtual로 선언하면 vtable(가상 테이블)이라 부르는 특수한 메모리 영역을 활용해서 가장 적합한 구현 코드를 호출합니다. virtual 메서드가 하나 이상 정의된 클래스마다 vtable이 존재하는데, 이 클래스로 생성된 객체마다 vtable에 대한 포인터를 갖게 됩니다. virtual 메서드의 구현 코드에 대한 포인터는 바로 이 vtable에 담겨 있습니다. 그래서 객체에 대해 메.. C++ 2024.12.14
OpenCV Install C++ 1. OpenCV C++ 설치 방법C++에서 OpenCV를 사용하려면, OpenCV를 다운로드하고, C++ 프로젝트에 적절히 설정해야 합니다.1.1. Windows에서 OpenCV 설치1.1.1. OpenCV 다운로드OpenCV 공식 웹사이트(https://opencv.org/releases/)에서 최신 버전의 OpenCV를 다운로드합니다.다운로드 페이지에서 "Windows"를 선택하고, opencv-4.x.x-vc14_vc15.exe (또는 최신 버전)을 다운로드합니다.다운로드한 .exe 파일을 실행하여 OpenCV를 설치합니다. 설치 경로는 기본적으로 C:\opencv입니다. *압축을 해제하면 위와 같은 폴더들이 나오는데, 그냥 build 폴더 사용하시면 됩니다. (필요한 경우가 아니라면 CMake.. 영상처리 2024.12.14
register c++ register 란목적: 변수의 사용 빈도가 높을 때 해당 변수를 CPU 레지스터에 저장하도록 컴파일러에 힌트를 주기 위한 키워드였습니다. CPU 레지스터는 메모리보다 훨씬 빠르게 접근할 수 있기 때문입니다.특징:속도 최적화: 변수의 접근 속도를 높이기 위해 설계된 키워드입니다.주소를 취할 수 없음: register 변수는 메모리에 저장되지 않을 수 있으므로, 주소를 취할 수 없습니다(& 연산자 사용 불가).현대 C++에서 비추천: 최신 컴파일러는 이미 고급 최적화를 수행하며, register 키워드의 사용을 무시합니다.C++17에서는 사용이 더 이상 권장되지 않으며(deprecated),C++20에서는 완전히 제거되었습니다. C++ 2024.12.13
OpenCV resize C++ 1. resize 함수void cv::resize( InputArray src, // 입력 이미지 OutputArray dst, // 출력 이미지 Size dsize, // 출력 이미지 크기 (가로, 세로) double fx = 0, // x축 스케일 비율 (선택 사항) double fy = 0, // y축 스케일 비율 (선택 사항) int interpolation = INTER_LINEAR // 보간법 (기본값: 선형 보간)); src: 입력 이미지.dst: 크기 조정 후 출력 이미지.dsize: 결과 이미지의 크기. Size(width, height) 형식.fx,.. 영상처리 2024.12.13
Opencv Histogram C++ 1. 히스토그램 함수cv::calcHist( const std::vector& images, // 입력 이미지 (벡터) const std::vector& channels, // 분석할 채널 (예: {0}은 그레이스케일) const cv::Mat& mask, // ROI 마스크 (전체 이미지 사용 시 cv::Mat()) cv::Mat& hist, // 출력 히스토그램 const std::vector& histSize, // 히스토그램 bin 수 (예: {256}) const std::vector& ranges // 픽셀 값 범위 (예: {0, 256})); 2. 예제 코드#include #incl.. 영상처리 2024.12.13
OpenCV filter2d Source Code (C++) opencv version : 2.4link : https://github.com/opencv/opencv/blob/2.4/modules/imgproc/src/filter.cppvoid cv::filter2D( InputArray _src, OutputArray _dst, int ddepth, InputArray _kernel, Point anchor, double delta, int borderType ){ Mat src = _src.getMat(), kernel = _kernel.getMat(); if( ddepth = dft_filter_size ) { Mat temp; if( src.data .. 영상처리 2024.12.13
AutoThreshold (Yen) C++ Java -> C++ Codeint Yen(float* histo, int n_length) { // Implements Yen thresholding method // 1) Yen J.C., Chang F.J., and Chang S. (1995) "A New Criterion // for Automatic Multilevel Thresholding" IEEE Trans. on Image // Processing, 4(3): 370-378 // 2) Sezgin M. and Sankur B. (2004) "Survey over Image Thresholding // Techniques and Quantitative Performance Evaluation" Journal of .. 영상처리 2024.12.11
AutoThreshold (Triangle) C++ Java -> C++ Codeint Triangle(float* histo, int n_length){ // Zack, G. W., Rogers, W. E. and Latt, S. A., 1977, // Automatic Measurement of Sister Chromatid Exchange Frequency, // Journal of Histochemistry and Cytochemistry 25 (7), pp. 741-753 // // modified from Johannes Schindelin plugin // // find min and max int min = 0, dmax = 0, max = 0, min2 = 0; for (int i = 0; i 0) { min = i; br.. 영상처리 2024.12.11
AutoThreshold (Shanbhag) C++ Java -> C++ Codeint Shanbhag(float* histo, int n_length) { // Shanhbag A.G. (1994) "Utilization of Information Measure as a Means of // Image Thresholding" Graphical Models and Image Processing, 56(5): 414-419 // Ported to ImageJ plugin by G.Landini from E Celebi's fourier_0.8 routines int threshold; int ih, it; int first_bin; int last_bin; double term; double tot_ent; /* total entropy */ doub.. 영상처리 2024.12.11