is_block_type_valid(header- _block_use)
/*
CascadeClassifier를 전역으로 끄집어내니까 발생했음
그런데 실제론 vector메모리 문제라서 직접 할당해야함
vector<Rect> face_pos;
face_pos.reserve(50);
이런식으로 쓰면됨
*/
wntdll_pdb로드되지 않음
/*
sleep함수를 쓰거나 종료될때 발생함
*/
is_block_type_valid(header- _block_use)
/*
CascadeClassifier를 전역으로 끄집어내니까 발생했음
그런데 실제론 vector메모리 문제라서 직접 할당해야함
vector<Rect> face_pos;
face_pos.reserve(50);
이런식으로 쓰면됨
*/
wntdll_pdb로드되지 않음
/*
sleep함수를 쓰거나 종료될때 발생함
*/
#include "opencv2\opencv.hpp" //기본적으로 불러오는 헤더
static CascadeClassifier face_Cascade //검색 시스템의 클래스
face.load("haarcascade_frontalface_default.xml")) //이런식으로 불러와서 사용, 성공시 true반환
face_Cascade.detectMultiScale(Mat 이미지,vector<Rect> 저장할 위치, 지정된 값만큼 스케일을 바꾸면서 검색, 후보를 몇개나 찾아볼지, 검색옵션(하단참조)CV_HAAR_FIND_BIGGEST_OBJECT
,Size 최소 사이즈 Size(10,10)이렇게 쓰면 됨,Size 최대사이즈)
검색옵션(or연산으로 중첩가능)
CV_HAAR_FIND_BIGGEST_OBJECT 중첩시 가장 큰거만 반환
CV_HAAR_SCALE_IMAGE 이미지의 스케일을 바꾸면서 검색
CV_HAAR_DO_ROUGH_SEARCH 한개만 찾음
Mat는 2차원 배열같은것, img대용품
cvtColor(입력 Mat, 출력 Mat, CV_RGB2GRAY); //그레이생성
cvSetImageROI(img_buff,cvRect(0,0, img_buff.size().width, img_buff.size().height)); //스케일변경인줄 알았는데 아닌듯
circle(Mat형 이미지, Point(x,y),크기,색상 Scalar(0, 0, 255),굵기,0);//원그리기
putText(Mat 이미지,표시할 문자열,Point(x,y),폰트 (하단참조),폰트 굵기(기본값1),색상 Scalar(255, 255, 255))
CV_FONT_HERSHEY_SIMPLEX //산세리프폰트 중간크기
CV_FONT_HERSHEY_PLAIN //산세리프폰트 작은크기
CV_FONT_HERSHEY_DUPLEX //세리프폰트 2줄
CV_FONT_HERSHEY_COMPLEX //세리프폰트 중간크기
CV_FONT_HERSHEY_TRIPLEX //세리프폰트 3줄
CV_FONT_HERSHEY_COMPLEX_SMALL //세리프폰트 작은크기
CV_FONT_HERSHEY_SCRIPT_SIMPLEX //필기체
CV_FONT_HERSHEY_SCRIPT_COMPLEX //필기체2CV_FONT_ITALC //이탤릭체
Mat img = imread("Lenna.png"); //이미지열기
imwrite("copy.jpg", img );//저장하기
mat접근방법
//at접근, 간편하지만 느림
if (img_t.type() == CV_8UC1)//단일8비트 채널
{
for (int i = 0; i < img_t.cols; i ++)//x축
{
for (int j = 0; j < img_t.rows; j ++)//y축
{
img_t.at<uchar>(i, j) = 255;//밝기
}
}
}
if (img_t.type() == CV_8UC3)//3색 8비트 채널
{
for (int i = 0; i < img_t.cols; i ++)//x축
{
for (int j = 0; j < img_t.rows; j ++)//y축
{
img_t2.at<Vec3b>(j, i)[0] = 255;//B
img_t2.at<Vec3b>(j, i)[1] = 255;//G
img_t2.at<Vec3b>(j, i)[2] = 255;//R
img_t2.at<Vec3b>(j, i)= Vec3b(255,255,255);//BGR
}
}
}
포인터접근
if (img_t2.type()==CV_8UC3)//3색 8비트 채널
{
float _t;
int img_t2_channels= img_t2.channels();
for (int j = 0; j < img_t2.rows; j++)//y축
{
uchar * ptr_img_t = img_t2.ptr<uchar>(j);
for (int i = 0; i < img_t2.cols*img_t2_channels; i += img_t2_channels)//x축
{
float r, g, b, _max, _min;
float h, s, v;
//if (img_t2.channels() == 3)
r = ptr_img_t[i + 2];
g = ptr_img_t[i + 1];
b = ptr_img_t[i + 0];
}
}
}
캠 연결
속성을 연다
c++일반의 디렉터리를 다음으로 바꿔준다
D:/OpenCV_2.4.12/opencv/build/include;%(AdditionalIncludeDirectories)
필요에 따라 해당위치로 가서 include할 파일을 폴더에서 꺼내준다
D:/OpenCV_2.4.12/opencv/build/include
를 추가하고 엔터
D:\OpenCV_2.4.12\opencv\build\x86\vc12\lib
를 추가하고 엔터
링커일반의 추가 라이브러리 디렉터리를 다음으로 바꿔준다
D:\OpenCV_2.4.12\opencv\build\x86\vc12\lib;%(AdditionalLibraryDirectories)
링커 입력란의 원래 있었던 종속성에 아래의 종속성을 추가해준다
원래 있었던 종속성
kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
추가할 종속성
opencv_kit_2_4_12프로젝트용.zip를 프로젝트에 푼다
(알짜 모아서 직접 압축한거)
https://drive.google.com/open?id=1lsoj2iAXnFZXSW5hz5DCoAavLhg_B-XH
헤더에
#include <opencv2\opencv.hpp>
를 넣고 쓴다