c++ 18

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