검색결과 리스트
분류 전체보기에 해당되는 글 52건
- 2014.06.08 precision, recall, F-measure
- 2013.09.03 컬러 추출후 해당 컬러 보여주기2
- 2013.09.03 컬러 추출후 해당 컬러 보여주기
- 2013.09.02 컬러 감축
- 2013.08.20 [콘솔]마우스 이벤트
- 2013.07.04 유용한 매크로 및 함수(콘솔)
- 2013.06.26 인테리어1
- 2013.06.15 이미지 읽고,처리,저장,보여주기(영상처리 기본)
- 2013.06.06 창의력을 키워줄 아이방 인테리어
- 2013.05.28 영역 결정 연산자(Scope Resolution Operator, ::)
글
글
컬러 추출후 해당 컬러 보여주기2
//-------------------------------------------------------------
// 메인
//-------------------------------------------------------------
void main() {
char * wnSrc = "src";
//Mat src = imread("resizesample.tif");
Mat src = imread("조명.jpg");
//Mat src = imread("ColorCheckerChart.png");
if(!src.data) exit(1);
//fun2(src);
imshow(wnSrc,src);
cvSetMouseCallback(wnSrc, onMouse, &src);
waitKey(0);
}
//-------------------------------------------------------------
// 마우스 이벤트
//-------------------------------------------------------------
void onMouse(int event, int x, int y, int flags, void* param) {
//Point3i rgb;
Mat *src = (Mat *)param;
static vector<Point3i> pt;
switch(event) {
case CV_EVENT_RBUTTONDOWN: //오른쪽버튼 DOWN
pt.push_back(Point3i(src->at<Vec3b>(y,x)[0], src->at<Vec3b>(y,x)[1], src->at<Vec3b>(y,x)[2]));
break;
case CV_EVENT_LBUTTONDOWN: //오른쪽버튼 DOWN
draw(*src, pt);
pt.clear();
break;
}
imshow("src",*src);
}
//-------------------------------------------------------------
// 컬러 그리기
//-------------------------------------------------------------
void draw(Mat &src, vector<Point3i> range) {
int gap = 5;
Mat temp = Mat(src.size(), src.type(),Scalar(0,255,0));
for(int i = 0; i< src.rows; i++) {
for(int j = 0; j< src.cols; j++){
Vec3b col = src.at<Vec3b>(i,j);
for(int k = 0; k<range.size(); k++) {
if( ( col[0] >= range[k].x - gap && col[0] <= range[k].x + gap) &&
( col[1] >= range[k].y - gap && col[1] <= range[k].y + gap) &&
( col[2] >= range[k].z - gap && col[2] <= range[k].z + gap) )
circle(temp,Point(j,i),1,Scalar(range[k].x,range[k].y,range[k].z),2);
}
}
}
imshow("temp",temp);
}
'OpenCV > my_source' 카테고리의 다른 글
컬러 추출후 해당 컬러 보여주기 (0) | 2013.09.03 |
---|---|
[콘솔]마우스 이벤트 (0) | 2013.08.20 |
컬러공간 변환 (0) | 2013.05.21 |
설정
트랙백
댓글
글
컬러 추출후 해당 컬러 보여주기
void main() {
char * wnSrc = "src";
Mat src = imread("resizesample.tif");
if(!src.data) exit(1);
imshow(wnSrc,src);
cvSetMouseCallback(wnSrc, onMouse, &src);
waitKey(0);
}
//-------------------------------------------------------------
// 마우스 이벤트
//-------------------------------------------------------------
void onMouse(int event, int x, int y, int flags, void* param) {
Scalar rgb;
Mat *src = (Mat *)param;
switch(event) {
case CV_EVENT_RBUTTONDOWN: //오른쪽버튼 DOWN
rgb[0]= src->at<Vec3b>(y,x)[0];
rgb[1]= src->at<Vec3b>(y,x)[1];
rgb[2]= src->at<Vec3b>(y,x)[2];
cout<<"B("<<rgb[0]<<")";
cout<<"G("<<rgb[1]<<")";
cout<<"R("<<rgb[2]<<")"<<endl;
color_extraction(*src,rgb);
break;
}
imshow("src",*src);
}
//-------------------------------------------------------------
// 컬러 추출
//-------------------------------------------------------------
void color_extraction( Mat &src, Scalar rgb ) {
Mat dst, addMat;
unsigned int gap = 5;
Scalar lowerBGR, uperBGR;
lowerBGR[0] = (rgb[0] - gap);
lowerBGR[1] = (rgb[1] - gap);
lowerBGR[2] = (rgb[2] - gap);
uperBGR[0] = (rgb[0] + gap);
uperBGR[1] = (rgb[1] + gap);
uperBGR[2] = (rgb[2] + gap);
inRange(src, lowerBGR, uperBGR, dst);
dilate( dst, dst, Mat() );dilate( dst, dst, Mat() );
erode( dst, dst, Mat() );
cvtColor(dst,dst,CV_GRAY2BGR);
add(src,dst,addMat);
imshow("Add",addMat);
imshow("Color_Detect Demo",dst);
}
'OpenCV > my_source' 카테고리의 다른 글
컬러 추출후 해당 컬러 보여주기2 (0) | 2013.09.03 |
---|---|
[콘솔]마우스 이벤트 (0) | 2013.08.20 |
컬러공간 변환 (0) | 2013.05.21 |
설정
트랙백
댓글
글
컬러 감축
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
// .ptr와 [] 사용하기(.at보다 빠름)
void colorReduce(Mat &image, int div=64) {
int nl= image.rows; // 행 개수
int nc= image.cols * image.channels(); // 각 행에 있는 원소의 총 개수
for (int j=0; j<nl; j++) {
uchar* data= image.ptr<uchar>(j);
for (int i=0; i<nc; i++) {
data[i]= data[i]/div*div + div/2;
}
}
}
void main()
{
Mat image;
int64 t, tinit;
image= imread("image.jpg");
if (!image.data) {
cerr<<"Error: 이미지 파일을 읽을 수 없습니다!!"<<endl;
exit(1);
}
imshow("original", image);
tinit = getTickCount();
colorReduce(image);
t = getTickCount() - tinit;
cout << "using .ptr and [] =" << 1000.*t/getTickFrequency() << "ms" << endl;
imshow("color reduce", image);
waitKey(0);
}
'OpenCV > 이미지 처리' 카테고리의 다른 글
이미지 이진화(binary)_threshold(), 적응적 이진화adaptiveThreshold() (0) | 2013.05.21 |
---|---|
이미지 반전 (0) | 2013.05.21 |
이미지 뒤집기_flip() (0) | 2013.05.21 |
이미지 크기 조정_resize() (0) | 2013.05.20 |
컬러공간 변환_cvtColor() (0) | 2013.05.20 |
설정
트랙백
댓글
글
[콘솔]마우스 이벤트
#include "colordetecth.h"
void onMouse(int event, int x, int y, int flags, void* param);
void fun(Mat &image, Scalar rgb);
main()
void main() {
char * wnSrc = "src";
Mat src;
src = imread("sample.tif");
//src = imread("ColorCheckerChart.png");
imshow(wnSrc,src);
cvSetMouseCallback(wnSrc, onMouse, &src);
waitKey(0);
}
onMouse()
void onMouse(int event, int x, int y, int flags, void* param) {
Scalar rgb;
Mat *src = (Mat *)param;
switch(event) {
case CV_EVENT_RBUTTONDOWN: //오른쪽버튼 DOWN
rgb[0]= src->at<Vec3b>(y,x)[0];
rgb[1]= src->at<Vec3b>(y,x)[1];
rgb[2]= src->at<Vec3b>(y,x)[2];
cout<<"B("<<rgb[0]<<")";
cout<<"G("<<rgb[1]<<")";
cout<<"R("<<rgb[2]<<")"<<endl;
fun(*src,rgb);
break;
case CV_EVENT_RBUTTONUP: //오른쪽버튼 UP
break;
case CV_EVENT_RBUTTONDBLCLK: //오른쪽버튼 떠블클릭
break;
case CV_EVENT_LBUTTONDOWN: //왼쪽버튼 DOWN
break;
case CV_EVENT_LBUTTONUP: //외쪽버튼 UP
break;
case CV_EVENT_LBUTTONDBLCLK: //외쪽버튼 더블클릭
break;
case CV_EVENT_MOUSEMOVE: //마우스움직임
if(flags & CV_EVENT_FLAG_RBUTTON){
//printf("현재 마우스 좌표는 (%d, %d) 입니다.\n", x, y);
//src->at<Vec3b>(y,x) = 255;
}
break;
}
imshow("src",*src);
}
void fun(Mat &image, Scalar rgb) {
for(int y=0; y<image.rows; y++) {
for(int x=0; x<image.cols; x++) {
if(y<80 & x<255) {
image.at<Vec3b>(y,x)[0] = rgb[0];
image.at<Vec3b>(y,x)[1] = rgb[1];
image.at<Vec3b>(y,x)[2] = rgb[2];
}
}
}
}
'OpenCV > my_source' 카테고리의 다른 글
컬러 추출후 해당 컬러 보여주기2 (0) | 2013.09.03 |
---|---|
컬러 추출후 해당 컬러 보여주기 (0) | 2013.09.03 |
컬러공간 변환 (0) | 2013.05.21 |
설정
트랙백
댓글
글
유용한 매크로 및 함수(콘솔)
1. 화면을 지우는 매크로 정의
#include <stdlib.h>
#define clear() system("cls")clear(); 함수는 콘솔 화면을 지움
2. 프로그램을 멈추게 하는 함수
#include <stdlib.h>
system("pause");
다른 방법으로는 getchar()
3. 커서를 x,y좌표로 이동시키는 함수 정의
#include<windows.h>
void gotoxy(int gox, int goy){
HANDLE hOut;
COORD Cur;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
Cur.X = gox;
Cur.Y = goy;
SetConsoleCursorPosition(hOut, Cur);
}
gotoxy(sx,sy); 함수는 커서를 (sx,sy)좌표로 이동시킴
4. 커서 출력 여부를 결정하는 함수 정의
#include<windows.h>
void cursor(BOOL bVisible){
HANDLE hConsole;
CONSOLE_CURSOR_INFO ConsoleCursor;
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
ConsoleCursor.bVisible = bVisible;
ConsoleCursor.dwSize = 20;
SetConsoleCursorInfo(hConsole , &ConsoleCursor);
}
cursor(false); 커서 출력 안됨
cursor(true); 커서가 출력
'C/C++' 카테고리의 다른 글
영역 결정 연산자(Scope Resolution Operator, ::) (0) | 2013.05.28 |
---|---|
private, public, protected 공부 (0) | 2013.05.28 |
[C/C++]도형 출력(삼각형,피라미드,다이아몬드) (0) | 2013.02.20 |
설정
트랙백
댓글
글
인테리어1
'미분류' 카테고리의 다른 글
창의력을 키워줄 아이방 인테리어 (0) | 2013.06.06 |
---|---|
[CCTV] CCTV활용형태 (0) | 2013.03.07 |
[CCTV]한강 다리에 투신 감시 CCTV/열 감지카메라 (0) | 2013.03.07 |
설정
트랙백
댓글
글
이미지 읽고,처리,저장,보여주기(영상처리 기본)
stdafx.h
#include <iostream>
using namespace std;
stdOCV.h
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
main.cpp
'OpenCV > example' 카테고리의 다른 글
프로그램 실행시간 측정 (0) | 2013.05.20 |
---|---|
[OpenCV]카메라 영상에서 특정값 검출(HSV컬러모델) (0) | 2013.05.10 |
[OpenCV]카메라 영상 출력 (0) | 2013.04.04 |
[OpenCV #7]이진 영상 변환(threshold) (0) | 2013.03.04 |
[OpenCV #6]split and merge (0) | 2013.02.20 |
설정
트랙백
댓글
글
창의력을 키워줄 아이방 인테리어
'미분류' 카테고리의 다른 글
인테리어1 (0) | 2013.06.26 |
---|---|
[CCTV] CCTV활용형태 (0) | 2013.03.07 |
[CCTV]한강 다리에 투신 감시 CCTV/열 감지카메라 (0) | 2013.03.07 |
설정
트랙백
댓글
글
영역 결정 연산자(Scope Resolution Operator, ::)
C언어에서는 지역변수가 전역변수 보다 우선 순위를 갖는다. 이 지역변수의 사용영역(Scope) 밖에서만 전역변수에 접근을 할 수 있다.
하지만, C++에서는 같은 변수명을 갖는 지역변수의 사용영역 안에서도 영역 결정 연산자 ::를 붙여 전역변수에 접근을 가능하게 하고 있다.
int var = 100;
int main()
{
int var = 200;
}
cout << ::var << endl;
실행결과
100
MFC 프로그래밍 팁
영역 결정 연산자는 함수명 앞에 사용될 수 있다. 클래스의 멤버함수를 사용할 때 클래스명 다음에 영역 결정 연산자가 사용될 때는 해당 클래스에 속해 있는 함수임을 나타낸다.
CWnd::MessageBox(_T("Hello~"));
위 코드는 MessageBox 함수가 CWnd 클래스에 속해 있는 멤버함수라는 의미가 된다.
그러나 같은 이름으로 된 전역함수인 경우에는 함수명 앞에 그냥 영역 결정 연산자를 붙인다.
::myFunction( ~ );
'C/C++' 카테고리의 다른 글
유용한 매크로 및 함수(콘솔) (0) | 2013.07.04 |
---|---|
private, public, protected 공부 (0) | 2013.05.28 |
[C/C++]도형 출력(삼각형,피라미드,다이아몬드) (0) | 2013.02.20 |