728x90
반응형

전체 글 337

CogCalibCheckrboardTool 사용하기

카메라 왜곡을 보정하기 위해서 화면 상의 맵핑 테이블을 만들어 보정해야 한다.이때 가장 편하게 사용할 수 있는 것이 Checkerboard다. Cognex에서 판매하는 Checkerboard도 있지만 경우에 따라 프린터해서 사용할 수도 있다.물론 사용하려는 정확도 수준에 따라 달라질 수 있다. VisionPro ToolBox의 Calibration & Fixturing 폴더에서 체크보드 툴을 선택한다. 보정 탭에서 체크의 크기와 보정 방법을 선택한다.가운데 있는 기준 막대에 따라 좌표계가 틀어지는데 이를 사용하지 않으려면 기준마크를 None으로 설정한다.체크보드의 사이즈를 타일 크기에 적용한다. 좌표축의 중심점이 카메라의 센터로 하고 싶다면 카메라 해상도의 절반을 기입하고 그렇지 않으면 체크보드의 기분 ..

산업기술/Cognex 2024.09.16

QuickBuild에서 ToolBlock 사용하기

Cognex를 사용할 시, 여러 tool을 마음대로 바꿔가며 결과를 구할 수 있도록 프로그램 하기 위해 Cognex에서 제공하는 vpp 파일을 사용한다.여기서 주의할 점은 Cognex에서 사용하는 모든 파일은 vpp라는 확장자를 가지고 있다. 그렇기 때문에 정확한 tool에서 제공하는 vpp를 읽어와야 한다.VisionPro tool은 각각 저장할 수 있지만 가장 다루기 쉬운 ToolBock를 사용하기로 한다.Job 파일의 경우 이미지 소스와 연동되는 것 같아서 Cognex에서 직접 카메라가 연결되지 않았을 때 처리가 어려운 면이 있었다.그런 면에서 ToolBlock이 다루기 쉬웠다. 우선 VisionProc QuickBuild에서 ToolBlock을 사용하려면 다음과 같은 순서로 추가하면 된다. Qui..

산업기술/Cognex 2024.09.16

(C#) DataGridView 데이터 업데이트 안되는 경우

Edit나 ComBox를 사용할 경우, 변경 후 Focus를 잃을 때까지 데이터는 업데이트 되지 않아 콤보박스를 수정하고 바로 저장을 누른다고 데이터가 저장되지 않는다. 변경 후 Enter 키를 누르거나 다른 Cell을 눌러줘야만 제대로 변경점이 적용된다. 이럴 때는 저장 전에 EndEdit()를 호출하면 된다. dataGridView1.EndEdit(); 간단하게 해결 했다.

Program Language/C# 2024.08.05

(MFC) CFileDialog 필터 사소한 실수

TCHAR szFilter[] = _T("Bitmap Data (*.bmp) | *.bmp ||");CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this); 이렇게 하면 *.bmp 파일이 나타나지 않는다. 왜?확장자 필터링 하는 문자열에서 뒤에 공백이 있으면 공백도 문자로 인식하는 듯 하다. TCHAR szFilter[] = _T("Bitmap Data (*.bmp) | *.bmp||"); 이렇게 하면 제대로 동작한다.

(MFC) Button Click 이벤트

Button Click을 테스트해 보는데 이상한 점을 발견했다.app 밖을 클릭하여 포커스를 잃은 뒤 버튼을 클릭하면 동작을 하지 않는 경우가 발생하는데,이것은 이전에 눌렀던 버튼을 눌렀을 때 그런 현상이 보였다. 화면 밖 클릭 -> 버튼 1 클릭 -> 화면 밖 클릭 -> 버튼 1 클릭  이런 식이다. LButtonDown과 LButtonUp 이벤트는 모두 정상적으로 발생했는데 Click만 발생하지 않는다.그래서 LButtonDown 이벤트에 SetFocus()를 넣으니 그제야 동작한다. 이건 원래 버튼도 그런 건지, 오버라이딩해서 그런 건지는 잘 모르겠다.어쨌든 해결!!void CButtonEnh::OnLButtonDown(UINT nFlags, CPoint point){ if (m_bDisabled)..

(OpenCV) SULF 해보기

패턴의 각도를 구할 필요가 생겨서 SULF를 구현해 보기로 했다. 머리가 복잡한데 어려운 아이를 해보려니 시간도 지식도 부족해서 곤란하던 차에 OpenCV에서 SULF를 지원한다는 걸 알게 되었다. opencv_contrib 어쩌고 하는 녀석을 cmake에서 추가해 주면 가능했다. (처음에 헤드 파일 없다고 생쇼를 했다) 그리고 구글링해서 따라 해 봤다. 그런데 이상하게 특징점은 잘 찼는데 영역을 못 잡아 냈다. 이렇게 말이다. 구글링을 해봐도 특징점이 제대로 잡지 못하면 그럴 수 있다고 했지만 아무리 봐도 제대로 잡은 것 같고 못 잡았더라도 너무 엉뚱한 곳을 찾아냈다. 하루를 지나 다음날 가만히 들여다보니 코드가 잘못되었다. 복붙 하다가 잘못한 건지 잘못된 예제를 따라한 건지는 잘 모르겠다. 그리고 고..

error C3861: 'min': identifier not found

1>c:\program files (x86)\windows kits\8.1\include\um\gdiplustypes.h(689): error C3861: 'min': identifier not found 1>c:\program files (x86)\windows kits\8.1\include\um\gdiplustypes.h(690): error C3861: 'min': identifier not found 오랜만에 봐서 살짝 당황했네. MIN, MAX가 중복 선언돼서 문제 되는 건 기억나는데.. 이건 opencv와 Gdiplus의 min, max가 충돌(?) 혹은 선점이 잘못되어서 그런 것 같다. 를 사용하지 않았는데, 이런 에러가 떠다니, opencv.hpp 보다 먼저 인클루드 해주면 된다. #inc..

(OpenCV) LNK2019: unresolved external symbol "class cv::debug_build_guard::_InputOutputArray ....

Error Linking static libraries - OpenCV Q&A Forum Error Linking static libraries edit Hi, I built opencv from source and I'm trying to make a dll that uses some of the opencv .lib. In visual studio I set the additional directory and dependencies as follows (.lib files are in that folder): [...]\lib;%(Addi answers.opencv.org 한참을 헤매다가 debug 프로젝트에서 release 라이브러리를 가져와서 발생한 에러라는 걸 알았다. 그래서 debug 라이브러..

C4430 : missing type specifier - int assumed.

오래전에 해결해 두고 또 같은 에러로 헤매고 있었다니.. 아 놀라워라.. C++에서 순환 참조(?)하게 되면 이런 에러가 뜬다. //A.h #include "B.h" class A{ B* b; .. }; //B.h #include "A.h" class B{ A* a; // error error C4430: missing type specifier - int assumed. } 이런 식으로 말이다. 결국 전방 선언을 이용해서 해결해야 한다. //B.h class A; // change the include of A.h to forward declaration class B { A* a; }; 대신 소스파일에서 해당 헤드파일을 포함해주면 된다.

git push maser "no matching host key type found. Thier offer : ssh-rsa" error

git에서 ssh 접속 시 no matching host key type found. Thier offer : ssh-rsa 에러가 발생한다. 이는 push나 pull 같은 명령어를 쓸 때 해당된다. 이것은 git의 version이 2.3 이상이 되면 ssh에서 rsa 방식을 지원하지 않아 PubkeyAcceptedAlgorithms와 HostKeyAlgorithms 옵션을 직접 지정해줘야 한다. git 폴더 아래 cofig 파일을 열어 옵션을 추가한다. [core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true symlinks = false ignorecase = true sshCommand = ssh ..

Program Language 2023.11.28

(python) CRM 워드파일 만들기

import mailmerge from mailmerge import MailMerge from datetime import date import pandas as pd template_1 = '고객감사메일.docx' template_2 = '고객감사메일-구매이력.docx' document_1 = MailMerge(template_1) customer_1 = { '등급': 'Gold', '전화번호': '070-XXX-XXXX', '상호': '좋은 신발', '구입총액': '500,000원', '배송한도': '50,000원', '주소': '서울시 종로구 11번지', '날짜': '{:%Y-%m-%d}'.format(date.today()), '할인': '5%', '수신자': '이순신'} document_1.m..

(python) 두 개 엑셀 파일 비교하기

import pandas as pd import xlwings as xw excel1 = '분개장_1.xlsx' excel2 = '분개장_2.xlsx' df_excel1 = pd.read_excel(excel1, 'Sheet1', na_values=['NA']) df_excel2 = pd.read_excel(excel2, 'Sheet1', na_values=['NA']) df_excel1['version'] = 'cur' df_excel2['version'] = 'new' gb_excel1 = df_excel1.groupby(['전표일자', '전표번호']) gb_excel2 = df_excel2.groupby(['전표일자', '전표번호']) df_excel1['전표번호seq'] = gb_excel1.cu..

(python) 코스피 종목 데이터 가져오기

import pandas as pd import numpy as np import FinanceDataReader as fdr import xlwings as xw import os base_dir = os.getcwd() df_code = pd.read_csv('종목코드.csv') df_code = df_code[df_code['검색'] == 1] df_code = df_code.reset_index() print(df_code) date_s = '2021-10-01' date_e = '2022-10-30' tbl_list = [] for i in range(len(df_code)) : # csv로 읽어서 그런지 숫자 첫자리의 0이 계속 삭제되어서 강제로 채웠다. # 종목코드는 6자리니까 강제로 맞췄다..

728x90
반응형