#include <opencv2\opencv.hpp>
#include <ikmeans.h>
using namespace std;
using namespace cv;
#pragma comment(lib, "opencv_core246.lib")
#pragma comment(lib, "opencv_highgui246.lib")
#pragma comment(lib, "vl.lib")
int main()
{
// data generation
unsigned char data[200];
RNG rng(time(0));
for (int i = 0; i < 50; i++)
{
data[i*2] = rng.uniform(20, 100);
data[i*2+1] = rng.uniform(150, 230);
data[100+i*2] = rng.uniform(150, 230);
data[100+i*2+1] = rng.uniform(20, 100);
}
// kmeans initialization
VlIKMFilt *ikm = vl_ikm_new(VlIKMAlgorithms::VL_IKM_LLOYD);
vl_ikm_init_rand(ikm, 2, 2);
// kmeans clustering
vl_ikm_train(ikm, (const vl_uint8 *)data, 100);
// get centers
const vl_ikm_acc *centers = vl_ikm_get_centers(ikm);
// quanization
vl_uint assignments[100];
vl_ikm_push(ikm, assignments, data, 100);
// result visualization
Mat image(250, 250, CV_8UC3);
circle(image, Point(centers[0],centers[1]), 3, Scalar(255,0,0), 2);
circle(image, Point(centers[2],centers[3]), 3, Scalar(0,0,255), 2);
for (int i = 0; i < 100; i++)
{
if (assignments[i] == 0)
circle(image, Point(data[i*2],data[i*2+1]), 1, Scalar(255,0,0), 2);
else
circle(image, Point(data[i*2],data[i*2+1]), 1, Scalar(0,0,255), 2);
}
cvShowImage("Image", &(IplImage)image);
waitKey();
// termination
vl_ikm_delete(ikm);
return 0;
}
enfa's notes
2013년 7월 18일 목요일
K-means Clustering using VLFeat
#include <opencv2\opencv.hpp>
#include <kmeans.h>
using namespace std;
using namespace cv;
#pragma comment(lib, "opencv_core246.lib")
#pragma comment(lib, "opencv_highgui246.lib")
#pragma comment(lib, "vl.lib")
int main()
{
// data generation
float data[200];
RNG rng(time(0));
for (int i = 0; i < 50; i++)
{
data[i*2] = rng.uniform(20, 230);
data[i*2+1] = rng.uniform(271, 480);
data[100+i*2] = rng.uniform(271, 480);
data[100+i*2+1] = rng.uniform(20, 230);
}
// kmeans initialization
VlKMeans *km = vl_kmeans_new(VL_TYPE_FLOAT, VlDistanceL2);
// parameter setting
vl_kmeans_set_algorithm(km, VlKMeansAlgorithm::VlKMeansLloyd);
vl_kmeans_set_initialization(km, VlKMeansInitialization::VlKMeansPlusPlus);
// kmeans clustering
vl_kmeans_cluster(km, data, 2, 100, 2);
// get centers
const float *centers = (const float *)vl_kmeans_get_centers(km);
// quanization
vl_uint32 assignments[100];
float distances[100];
vl_kmeans_quantize(km, assignments, distances, data, 100);
// result visualization
Mat image(500, 500, CV_8UC3);
circle(image, Point(centers[0],centers[1]), 3, Scalar(255,0,0), 2);
circle(image, Point(centers[2],centers[3]), 3, Scalar(0,0,255), 2);
for (int i = 0; i < 100; i++)
{
if (assignments[i] == 0)
circle(image, Point(data[i*2],data[i*2+1]), 1, Scalar(255,0,0), 2);
else
circle(image, Point(data[i*2],data[i*2+1]), 1, Scalar(0,0,255), 2);
}
cvShowImage("Image", &(IplImage)image);
waitKey();
// termination
vl_kmeans_delete(km);
return 0;
}
#include <kmeans.h>
using namespace std;
using namespace cv;
#pragma comment(lib, "opencv_core246.lib")
#pragma comment(lib, "opencv_highgui246.lib")
#pragma comment(lib, "vl.lib")
int main()
{
// data generation
float data[200];
RNG rng(time(0));
for (int i = 0; i < 50; i++)
{
data[i*2] = rng.uniform(20, 230);
data[i*2+1] = rng.uniform(271, 480);
data[100+i*2] = rng.uniform(271, 480);
data[100+i*2+1] = rng.uniform(20, 230);
}
// kmeans initialization
VlKMeans *km = vl_kmeans_new(VL_TYPE_FLOAT, VlDistanceL2);
// parameter setting
vl_kmeans_set_algorithm(km, VlKMeansAlgorithm::VlKMeansLloyd);
vl_kmeans_set_initialization(km, VlKMeansInitialization::VlKMeansPlusPlus);
// kmeans clustering
vl_kmeans_cluster(km, data, 2, 100, 2);
// get centers
const float *centers = (const float *)vl_kmeans_get_centers(km);
// quanization
vl_uint32 assignments[100];
float distances[100];
vl_kmeans_quantize(km, assignments, distances, data, 100);
// result visualization
Mat image(500, 500, CV_8UC3);
circle(image, Point(centers[0],centers[1]), 3, Scalar(255,0,0), 2);
circle(image, Point(centers[2],centers[3]), 3, Scalar(0,0,255), 2);
for (int i = 0; i < 100; i++)
{
if (assignments[i] == 0)
circle(image, Point(data[i*2],data[i*2+1]), 1, Scalar(255,0,0), 2);
else
circle(image, Point(data[i*2],data[i*2+1]), 1, Scalar(0,0,255), 2);
}
cvShowImage("Image", &(IplImage)image);
waitKey();
// termination
vl_kmeans_delete(km);
return 0;
}
라벨:
clustering,
kmeans,
opencv,
vlfeat
2013년 6월 16일 일요일
Converting Java BufferedImage to OpenCV Mat and vice versa
BufferedImage to Mat
BufferedImage image = myBufferedImage;
byte[] data = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
Mat mat = new Mat(image.getHeight(), image.getWidth, CvType.CV_8UC3);
mat.put(0, 0, data);
Mat to BufferedImage
Mat mat = myMat;
byte[] data = new byte[mat.rows()*mat.cols()*(int)(mat.elemSize())];
mat.get(0, 0, data);
if (mat.channels() == 3) {
for (int i = 0; i < data.length; i += 3) {
byte temp = data[i];
data[i] = data[i + 2];
data[i + 2] = temp;
}
}
BufferedImage image = new BufferedImage(mat.cols(), mat.rows(), BufferedImage.TYPE_3BYTE_BGR);
image.getRaster().setDataElements(0, 0, mat.cols(), mat.rows(), data);
BufferedImage image = myBufferedImage;
byte[] data = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
Mat mat = new Mat(image.getHeight(), image.getWidth, CvType.CV_8UC3);
mat.put(0, 0, data);
Mat to BufferedImage
Mat mat = myMat;
byte[] data = new byte[mat.rows()*mat.cols()*(int)(mat.elemSize())];
mat.get(0, 0, data);
if (mat.channels() == 3) {
for (int i = 0; i < data.length; i += 3) {
byte temp = data[i];
data[i] = data[i + 2];
data[i + 2] = temp;
}
}
BufferedImage image = new BufferedImage(mat.cols(), mat.rows(), BufferedImage.TYPE_3BYTE_BGR);
image.getRaster().setDataElements(0, 0, mat.cols(), mat.rows(), data);
2013년 5월 27일 월요일
Chrome Shortcuts
탭 및 창 단축키
Ctrl+N | 새 창을 엽니다. |
Ctrl+T | 새 탭을 엽니다. |
Ctrl+Shift+N | 시크릿 모드에서 새 창을 엽니다. |
Ctrl+O를 누른 다음 파일을 선택합니다. | 컴퓨터의 파일을 Chrome에서 엽니다. |
Ctrl 키를 누른 상태에서 링크를 클릭합니다. 또는 가운데 마우스 버튼(또는 마우스휠)으로 링크를 클릭합니다. | 백그라운드의 새 탭에서 링크가 열립니다. |
Ctrl+Shift 키를 누른 상태에서 링크를 클릭합니다. 또는 Shift 키를 누른 상태에서 가운데 마우스 버튼(또는 마우스휠)으로 링크를 클릭합니다. | 새 탭에서 링크를 열고 새로 열린 탭으로 전환합니다. |
Shift 키를 누른 상태에서 링크를 클릭합니다. | 새 창에서 링크를 엽니다. |
Ctrl+Shift+T | 마지막으로 닫았던 탭을 다시 엽니다. Chrome은 최근에 닫았던 탭을 10개까지 기억합니다. |
링크를 탭으로 드래그합니다. | 탭에서 링크를 엽니다. |
링크를 탭 표시줄의 빈 영역으로 드래그합니다. | 새 탭에서 링크를 엽니다. |
탭 표시줄 밖으로 탭을 드래그합니다. | 새 창에서 탭을 엽니다. |
탭 표시줄 밖으로 탭을 드래그하여 기존 창으로 이동합니다. | 기존 창에서 탭을 엽니다. |
Esc 키를 누른 상태에서 탭을 드래그합니다. | 탭을 원래 위치로 되돌립니다. |
Ctrl+1 ~ Ctrl+8 | Switches to the tab at the specified position number on the tab strip. |
Ctrl+9 | 마지막 탭으로 전환합니다. |
Ctrl+Tab 또는 Ctrl+PgDown | 다음 탭으로 전환합니다. |
Ctrl+Shift+Tab 또는 Ctrl+PgUp | 이전 탭으로 전환합니다. |
Alt+F4 또는 Ctrl+Shift+W | 현재 창을 닫습니다. |
Ctrl+W 또는 Ctrl+F4 | 현재 탭 또는 팝업을 닫습니다. |
가운데 마우스 버튼(또는 마우스휠)으로 탭을 클릭합니다. | 클릭한 탭을 닫습니다. |
브라우저 툴바의 뒤로 또는 앞으로 화살표를 마우스 오른쪽 버튼으로 클릭하거나 길게 클릭합니다. | 탭에 인터넷 사용기록이 표시됩니다. |
Backspace 키 또는 Alt 키와 왼쪽 화살표 키를 함께 누릅니다. | 해당 탭의 인터넷 사용기록에 저장된 이전 페이지로 이동합니다. |
Shift+Backspace 키 또는 Alt 키와 오른쪽 화살표 키를 함께 누릅니다. | 해당 탭의 인터넷 사용기록에 저장된 다음 페이지로 이동합니다. |
Ctrl 키를 누르고 뒤로 화살표, 앞으로 화살표 또는 툴바의 이동 버튼을 클릭합니다. 또는 마우스 버튼이나 마우스휠로 세 가지 중 아무 버튼이나 클릭합니다. | 백그라운드의 새 탭에서 버튼 대상이 열립니다. |
탭 표시줄의 빈 영역을 더블클릭합니다. | 창을 최대화하거나 최소화합니다. |
Alt+Home | 현재 창에서 홈페이지를 엽니다. |
Chrome 기능 단축키
Alt+F나 Alt+E 또는F10 | Chrome을 맞춤설정하고 설정을 제어할 수 있는 Chrome 메뉴 를 엽니다. |
Ctrl+Shift+B | 북마크바를 표시하거나 숨깁니다. |
Ctrl+H | 방문 기록 페이지를 엽니다. |
Ctrl+J | 다운로드 페이지를 엽니다. |
Ctrl+Shift+Esc | 작업 관리자를 엽니다. |
Shift+Alt+T | 브라우저 툴바의 첫번째 도구에 포커스를 설정합니다. 그 다음에 다음 단축키를 사용하여 툴바 사이를 이동할 수 있습니다.
|
F6 또는 Shift+F6 | 키보드로 액세스할 수 있는 다음 창으로 포커스가 전환됩니다. 이 창은 다음 항목을 포함합니다.
|
Ctrl+Shift+J | 개발자 도구를 엽니다. |
Ctrl+Shift+Delete | 인터넷 사용정보 삭제 대화상자를 엽니다. |
F1 | 새 탭에서 도움말 센터를 엽니다. |
Ctrl+Shift+M | 여러 사용자 간에 전환합니다. |
검색주소창 단축키
검색주소창에서 다음 단축키를 사용하세요.
검색어를 입력한 다음 Enter 키를 누릅니다. | 기본 검색엔진을 사용하여 검색을 수행합니다. |
검색엔진 키워드를 입력하고 스페이스바를 누른 후 검색어를 입력한 다음 Enter 키를 누릅니다. | 키워드와 관련된 검색엔진을 사용하여 검색을 수행합니다. |
검색엔진 URL을 입력하고 프롬프트가 표시되면 Tab 키를 누른 후 검색어를 입력하고 Enter 키를 누릅니다. | URL과 관련된 검색엔진을 사용하여 검색을 수행합니다. |
Ctrl+Enter | 검색주소창에 입력한 내용에 www. 및 .com 을 추가한 다음 결과 URL을 엽니다. |
URL을 입력한 다음 Alt+Enter 키를 누릅니다. | 새 탭에서 URL을 엽니다. |
Ctrl+L 또는 Alt+D | Highlights the URL. |
Ctrl+K 또는 Ctrl+E | 검색주소창에 '?'를 삽입합니다. 물음표 뒤에 검색어를 입력하면 기본 검색엔진을 사용하여 검색이 수행됩니다. |
Ctrl 키와 왼쪽 화살표 키를 함께 누릅니다. | 커서를 검색주소창의 이전 키워드로 이동합니다. |
Ctrl 키와 오른쪽 화살표 키를 함께 누릅니다. | 커서를 검색주소창의 다음 키워드로 이동합니다. |
Ctrl+Backspace | 검색주소창에서 커서 앞에 있는 키워드를 삭제합니다. |
검색주소창 메뉴에서 키보드 화살표로 항목을 선택한 다음Shift+Delete 키를 누릅니다. | 가능한 경우 인터넷 사용기록에서 해당 항목을 삭제합니다. |
검색주소창 메뉴에서 가운데 마우스 버튼(또는 마우스휠)으로 항목을 클릭합니다. | 백그라운드의 새 탭에서 해당 항목이 열립니다. |
검색주소창 메뉴가 표시되면 Page Up 또는 Page Down키를 누릅니다. | 메뉴에서 첫 번째 또는 마지막 항목을 선택합니다. |
웹페이지 단축키
Ctrl+P | 현재 페이지를 인쇄합니다. |
Ctrl+S | 현재 페이지를 저장합니다. |
F5 또는 Ctrl+R | 현재 페이지를 새로고칩니다. |
Esc | 현재 페이지의 로드를 중지합니다. |
Ctrl+F | 검색 바를 엽니다. |
Ctrl+G 또는 F3 | 검색 바에서 입력한 항목과 일치하는 다음 항목을 찾습니다. |
Ctrl+Shift+G, Shift+F3 또는 Shift+Enter | 검색 바에서 입력한 항목과 일치하는 이전 항목을 찾습니다. |
가운데 마우스 버튼(또는 마우스휠)을 클릭합니다. | 자동 스크롤을 활성화합니다. 마우스를 움직이면 마우스 방향에 따라 페이지가 자동으로 스크롤됩니다. |
Ctrl+F5 또는 Shift+F5 | 캐시된 콘텐츠를 무시하고 현재 페이지를 새로고칩니다. |
Alt 키를 누른 상태에서 링크를 클릭합니다. | 링크 대상을 다운로드합니다. |
Ctrl+U | 현재 페이지의 소스를 엽니다. |
링크를 북마크바로 드래그합니다. | 링크를 북마크로 저장합니다. |
Ctrl+D | 현재 웹페이지를 북마크로 저장합니다. |
Ctrl+Shift+D | 열린 페이지를 모두 새 폴더에 북마크로 저장합니다. |
F11 | 페이지를 전체화면 모드로 엽니다. 전체화면을 종료하려면 F11 키를 다시 누릅니다. |
Ctrl과 +를 누르거나, Ctrl 키를 누른 상태에서 마우스휠을 위로 스크롤합니다. | 페이지가 확대됩니다. |
Ctrl과 -를 누르거나, Ctrl 키를 누른 상태에서 마우스휠을 아래로 스크롤합니다. | 페이지가 축소됩니다. |
Ctrl+0 | 페이지가 원래 크기로 복원됩니다. |
스페이스바 | 웹페이지 아래로 스크롤합니다. |
Home | 페이지 맨 위로 이동합니다. |
End | 페이지 맨 아래로 이동합니다. |
Shift 키를 누르고 마우스휠을 스크롤합니다. | 페이지를 가로로 스크롤합니다. |
텍스트 단축키
Ctrl+C | 강조표시된 콘텐츠를 클립보드로 복사합니다. |
Ctrl+V 또는 Shift+Insert | 클립보드의 콘텐츠를 붙여넣습니다. |
Ctrl+Shift+V | 클립보드의 콘텐츠를 서식 없이 붙여넣습니다. |
Ctrl+X 또는 Shift+Delete | 강조표시된 콘텐츠를 삭제하고 클립보드로 복사합니다. |
2013년 5월 26일 일요일
Java Operators
Simple Assignment Operator
= Simple assignment operator
Arithmetic Operators
+ Additive operator (also used for String concatenation) - Subtraction operator * Multiplication operator / Division operator % Remainder operator
Unary Operators
+ Unary plus operator; indicates positive value (numbers are positive without this, however) - Unary minus operator; negates an expression ++ Increment operator; increments a value by 1 -- Decrement operator; decrements a value by 1 ! Logical complement operator; inverts the value of a boolean
Equality and Relational Operators
== Equal to != Not equal to > Greater than >= Greater than or equal to < Less than <= Less than or equal to
Conditional Operators
&& Conditional-AND
|| Conditional-OR
?: Ternary (shorthand for
if-then-else
statement)
Type Comparison Operator
instanceof Compares an object to a specified type
Bitwise and Bit Shift Operators
~ Unary bitwise complement << Signed left shift >> Signed right shift >>> Unsigned right shift & Bitwise AND ^ Bitwise exclusive OR | Bitwise inclusive OR
피드 구독하기:
글 (Atom)