컬러 감축

OpenCV/이미지 처리 2013. 9. 2. 16:03


#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/my_source 2013. 8. 20. 16:57


#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

유용한 매크로 및 함수(콘솔)

C/C++ 2013. 7. 4. 19:22

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); 커서가 출력

ConsoleCursor구조체의 dwSize값을 변경하면 커서의 두께조절, default 값은 20

반응형