대학생때 자연어 처리에 관해서는 상당히 깊게 생각해 본 터이라 전문가는 아니더라도 기초적인 지식에 대해서는 상당히 꿰뚫고 있으나, 이미지 처리에 관해서는 전혀 문외하기에 (대충 원리만 추측할 뿐) OpenCV 예제중 Digit_svm 이 있기에 이를 분석하는 글을 작성 해 본다. 해당 글은 전문적인 분석이 아니며, 짧은 시간을 투자한 글이므로 정확하지 않을 수 있다. 지적 댓글은 언제나 환영이다. 우선 Digit_svm 이란 Digit = 숫자, SVM = Support Vector Machine 으로서 숫자의 패턴을 통해 숫자를 판별하는 방법을 배우는 OpenCV 의 예제이다. 보통은 Python 을 통해 많이 작업하는데 이 글은 C++ 기준으로 예제에 관해 간략하게 해설한다. OpenCV 를 CMak..
Programming/C++
#include #include #include #pragma comment(lib, "ws2_32") #define PORT 28888 #define PACKET_SIZE 36 #define SERVER_IP "127.0.0.1" using std::cout; using std::endl; void server() { WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); SOCKET hListen; hListen = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); SOCKADDR_IN tListenAddr; tListenAddr.sin_family = AF_INET; tListenAddr.sin_port = htons(PORT);..
C++ 에서 함수를 인자로 전달하는 방법 | C++ 에서 함수를 인자로 전달하기 C++11 이전에는 다른 함수의 인자로 함수를 전달하는 방법은 함수 포인터가 유일했습니다. C언어에서 이어져온 방식이기 때문에 C개발자들에게는 크게 불편하 mynameisdabin.tistory.com 해당 포스팅을 살펴보다 람다식 에서 햇갈릴만한 내용이 있기에 짧게 정리한다. 우선 람다식은 다음과 같이 작성된다. [캡처절] (매개변수) mutable -> 반환형식 { 함수내용 } 1. 캡쳐절은 외부 변수를 가져다 쓸 수 있는 공간이고, 2. 매개변수는 말 그대로 함수 선언시 필요한 매개 변수이다. 3. mutable 은 함수 내에서 외부 변수를 수정할 수 있게 해 주는 옵션이고. 4. 반환형식과 함수 내용은 아..
자료를 찾아보면 emplace_back 이 더 우수한 녀석이라거나 생성자 호출 차이라거나 그런 말들이 많이 있으나. 일단 최신 컴파일러 관점에서는 둘 다 아닌것 같다. emplace_back 과 push_back 의 차이 item 타입의 생성자가 타입을 인자로 받는다면? push_back 함수는 '객체' 를 집어 넣는 형식으로, 객체가 없이 삽입을 하려면 "임시객체 (rvalue) " 가 있어야 합니다. 또는 암시적 형변환이 가능하다면, openmynotepad.tistory.com 엄준식사생팬 님의 블로그에서 해당 코드를 참조해서 G++ 9 , Visual Studio 2019 (ISO C++14 표준) 에서 테스트 해 보았지만 결과는 같았다. 즉, 이유는 모르겠지만 STD 코드가 수정되었음을 추론해 ..
C4819 Warning 의 경우는 파일의 저장 포맷 형식이 UTF-8 With BOM 으로 설정되지 않아서 발생하는 문제이다. 여기서 UTF-8 은 그냥 같은 UTF-8 이 아니라, UTF-8 Without BOM 과 UTF-8 With BOM 으로 나뉘어 진다. .cpp, .hpp 파일을 저장 할 때, 한글, 중국어 등 multi-byte characters 가 하나라도 들어간다면 반드시 UTF - 8 With BOM(Signature) 으로 설정해야만, 해당 경고가 없어진다. 참고로, 해당 오류는 오지랖 넓은 '경고' 메세지가 아니다. 해당 문제로 인해 컴파일 단계에서는 문제가 없을 지 몰라도 Runtime 단계에서 디버그 해볼 시에 한글 글자가 깨지는 모습을 살펴 볼 수 있다. UTF-8 with..
C++ 에는 constexpr 이라는 예약어가 있다. 보통 학생들은 잘 모르는 예약어인데, 왜냐면 딱히 이것까지 가르칠 필요는 없기 때문이랄까... constexpr 에 대한 간단한 예시를 들면 다음과 같은 것이 있다. 1 2 3 int cc = 10; const int a = cc; // OK constexpr int b = cc; // Fail cs 보면 알겠지만 const 키워드는 runtime 에 결정되도 상관이 없는 반면 constexpr 의 경우는 반드시 compile 시간에 결정되어야 한다는 차이점이 있다. 때문에 나는 모두의 코드 블로그 에서 예제로 constexpr 을 사용하는것을 참조해 왔는데 다음과 같은 코드이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include #include #include using exe_ = void(*)(); //typedef void(*exe_)(); void execute() { printf("개굴"); } void timer(int time, exe_) { exe_ exe = execute; while (time) { Sleep(3000); exe(); } } int main() { timer(30, execute); } cs 함수 포인터는, 생각만큼 자주 사용하는 기법이 아니라서 깜빡 잊어버리기 쉽다. 위 코드를 잘 살펴보면 C++ 의 기본에 대해서 다시 한번 짚어 볼 수 있다. using 으로 exe_ 라..
개인적으로 존경하는 '리누스 토르발즈' 는 C++ 을 '끔찍한 언어' 라고 지칭했다. 나도 개발 시작한지 6개월도 안 되었을 때는 이를 이해하기 힘들었으나, 각종 기교에 대해서 많이 익히면 익힐수록.. '와... 진짜 더럽다' 라고 욕하고 있더라.. ㅠㅠ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include using namespace std; void hi(int temp_) { cout
현재 아주 간단한 프로그램을 제작중에 문뜩 의문이 생겨 포스팅 해 본다. Windows 에서는 system() , WinExec() 함수를 통해, 리눅스에서는 system() 함수를 통해 보통 명령어를 실행한다. 하지만 문제는 명령어를 실행 했을 때, 커맨드 상에 출력되는 값을 받아오고 싶을때는 어떻게 해야 할 지 난감하다. 이에 대한 대안 코드가 StackOverFlow 에 기재되어 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include #include #include #include #include std::string exec(const char* cmd) { char buffer[128]; ..
Determine .lib / .dll with header file I have 3rd party library in my program. For example : #INCLUDE #INCLUDE int main(int argc, char** argv) { // some stuff } How do i know stackoverflow.com 결론적으로 말하면 손쉽게 찾을 수 없다. 주석 등을 이용해 추측해야 하며, 자동으로 어떤 헤더와, dll, lib 가 매칭되는지 알 수 있는 방법은 없으며, 이는 반대 역시 마찬가지이다. (dll, lib 로 .h 를 찾기) 가장 좋은 방법은 해당 동적 라이브러리를 배포한 제작자에게 물어 보는 것이다.