반응형

pictureBox를 사용해야 하는데 Mat을 그대로 사용할 수가 없다.

Bitmap 으로 변환을 해주어야 하는데 고맙게도 함수가 있더이다.


참고 : http://blog.naver.com/PostView.nhn?blogId=nuren1&logNo=220727174546&redirect=Dlog&widgetTypeCall=true


참고사이트가.. 음.. 참고가 아니라 그냥 전부이다. 



Mat To Bitmap


Mat mat = new Mat("test.jpg", ImreadModes.Color);

// Mat mat = Cv2.ImRead("test.jpg", LoadMode.GrayScale);


Bitmap bitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);

생각보다 시간이 많이 걸린다는 점..

Mat을 생성할 때 ImRead함수를 사용할 수 있다.


Bitmap To Mat


Bitmap bitmap = new Bitmap("foobar.jpg");


Mat mat = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap);

이거부터 안해봤다. 아직 사용할 일이 없어서.

후기는 댓글로..(남길 수 있나 ?)


Mat to byte[]


Mat mat = new Mat("foobar.jpg", ImreadModes.Color);


byte[] bytes1 = mat.ToBytes(".png");


byte[] bytes2;

Cv2.ImEncode(".jpg", mat, out bytes2);


byte[] to Mat


byte[] imageData = System.IO.File.ReadAllBytes("foobar.jpg");


Mat colorMat = Mat.FromImageData(imageData, ImreadModes.Color);

Mat grayscaleMat = Mat.FromImageData(imageData, ImreadModes.GrayScale);


Mat alt = Cv2.ImDecode(imageData, ImreadModes.GrayScale);



참고 사이트에 있긴 하지만.. 혹시나 사라질까봐 정리를 합니다.







반응형

'ETC > OpenCvSharp' 카테고리의 다른 글

[OpenCvSharp] Mat 자르기(SubMat)  (0) 2016.12.06
[OpenCvSharp] Mat 회전 (getRotationMatrix2D, warpAffine)  (0) 2016.12.06
[OpenCvSharp] 설치  (0) 2016.12.01
반응형

OpenCv를 C#에서 사용하려면 OpenCvSharp를 설치해야 된다.


설치 방법은 매우.. 진짜 매우 간단하다.


환경 : Windows10 32bit, Visual Studio 2015


 - 프로젝트를 생성하고 솔루션 탐색기로 간다.


 -  프로젝트이름 우클릭 >> NutGet 패키지 관리를 선택



 - 찾아보기 > "opencvsharp" 검색 > "OpenCvSharp-AnyCPU" 선택 및 설치


- 위사진처럼 OpenCvSharp.CPlusPlus 추가

  - 추가하지 않을 경우 c 에서 opencv 사용하는 것처럼 사용하면 됩니다.

  







반응형

'ETC > OpenCvSharp' 카테고리의 다른 글

[OpenCvSharp] Mat 자르기(SubMat)  (0) 2016.12.06
[OpenCvSharp] Mat 회전 (getRotationMatrix2D, warpAffine)  (0) 2016.12.06
[OpenCvSharp] Mat to Bitmap  (2) 2016.12.01
반응형

opencv를 사용해서 개발을 시작할 때 Mat 을 vector로 바꾸는 작업을 했었다.

그때는 틀림 없이 Mat::copyTo 함수를 사용해서 간단하게 했던것 같은데

다시 작업을 하려니 되질 않네...

다른 방법을 찾아 나섰다.



검색어 : 구글 - mat copyto vector


for문을 이용해서 하는 방법도 많이 나오지만

나는 함수 하나로 해결하고 싶었다.


assign 함수를 사용하면 간단하게 끝낼 수 있다.

vector 끼리 복사 할때 사용했었는데 Mat 도 적용 가능 하다.


자료형이 double인 변수를 복사하려면




이렇게 하면 한방에 끝낼 수 있다.


반응형

'ETC > OpenCV' 카테고리의 다른 글

[OpenCV] 이미지 크기 변경 - resize()  (0) 2017.06.12
[OpenCV] 설치-nuget package  (0) 2017.06.11
[OpenCV] Mat 이미지 자르기  (0) 2016.10.21
[OpenCV] Mat::create()  (0) 2016.10.20
[OpenCV] Mat 클래스 행렬 생성 2  (0) 2016.10.20
반응형

예전에 작성한 파일을 열려고 했는데 'Found a swap file by the name `이라며 읽기 전용으로만 열렸다..

대충 검색에 의하면 vi로 파일을 열게 되면 스왑 파일이 생기는데 vi가 정상 종료 되면 이 파일이 자동으로 삭제가 되지만

비정상 종료 될 경우 이 파일이 남아 있어 다음에 또 열게 되면 이와 같은 에러가 발생한다고 한다.



위의 사진이 파일을 열었을 때 나오는 화면이다.

파일이 열려 있다는 이야기 인데.. 10일 전부터 열려 있네 ?


해결방법을 알아보자.

우선 다른 프로세스가 사용중인지 확인

ps -ef | grep (파일명)

한줄이 나온다면 사용중인 프로세스가 없는 것이고

그렇지 않다면 사용중인 프로세스가 있는 것이니

그 프로세스를 중지 하고 수정하면 될 것이다.


나같은 경우 한줄이 나왔다. 사용 중인 프로세스가 없다.

즉, 에디터로 작업 중 비정상 종료 된 것이다.

그럼 스왑 파일을 먼저 삭제 하고 다시 에디터를 이용해서 수정하면 된다.

rm -f (스왑파일) // 위의 경우 `.histogram.cpp.wsp` 가 된다.









반응형
반응형

이론만 쭉 정리하다가 이제 실제로 필요한 것들만 찾아서 정리 하기로 했다.


내가 필요한거슨 이미지의 특정 부분만 사용할 것이라 잘라내는 과정이 필요했다.


Mat을 Range로 범위를 지정할 수 있으므로 row와 col을 원하는 만큼 가져와서 출력해 보자.



예제


결과

이게 실제 실행 화면이고 

아래가 겹쳐서 위치를 놓아본 것입니다.




Mat img2 = img(Range(100,200), Range(100,200));

첫번째 Range(100,200)은 col을 100~199 까지 자른것이고

두번째 Range(100,200)은 Row를 100~199까지 자른것이지요


호호호호




반응형

'ETC > OpenCV' 카테고리의 다른 글

[OpenCV] 설치-nuget package  (0) 2017.06.11
cv::Mat copy to std::vector  (0) 2016.11.23
[OpenCV] Mat::create()  (0) 2016.10.20
[OpenCV] Mat 클래스 행렬 생성 2  (0) 2016.10.20
[OpenCV] Mat 클래스 행렬 생성 1  (0) 2016.10.20
반응형

Mat::create() 메서드는 rows, cols, type, size, ndims 등에 의해서 새로운Mat 클래스 행렬을 생성.


void Mat::create(int rows, int cols, int type);

void Mat::create(Size size, int type);

void Mat::create(int ndims, const int* sizes, int type);



예제


결과







반응형

'ETC > OpenCV' 카테고리의 다른 글

cv::Mat copy to std::vector  (0) 2016.11.23
[OpenCV] Mat 이미지 자르기  (0) 2016.10.21
[OpenCV] Mat 클래스 행렬 생성 2  (0) 2016.10.20
[OpenCV] Mat 클래스 행렬 생성 1  (0) 2016.10.20
[OpenCV] Range 클래스  (0) 2016.10.20
반응형

다른 방법의 행렬 생성을 알아보자..

그냥 이런 방법도 있다고만.. 알면 될거 같은데

내가 편한 방법으로 주로 사용할테니


예제


결과

딱봐도 감으로 알거라 생각...됨.. ?

그저 생성자일 뿐이니까...


반응형

'ETC > OpenCV' 카테고리의 다른 글

[OpenCV] Mat 이미지 자르기  (0) 2016.10.21
[OpenCV] Mat::create()  (0) 2016.10.20
[OpenCV] Mat 클래스 행렬 생성 1  (0) 2016.10.20
[OpenCV] Range 클래스  (0) 2016.10.20
[OpenCV] Scalar_ 클래스  (0) 2016.10.19
반응형

Mat 클래스는 C++ API에서 가장 중요한 클래스 중 하나로 1채널 또는 다채널의 실수, 복소수, 행렬, 영상 등의 수치 데이터를 표현하는 n차원 행렬 클래스이다.


행렬 생성

Mat 클래스는 다양한 생성자를 통하여 행렬을 생성한다.

행렬의 크기는 rows, cols, size로 명시

type은 자료형으로 CV_8UC1 ... CV_32FC1 ... 등을 사용 한다.

생성자를 다 써 놓는것보다 예제를 통해서.. 알아보자.



행렬 생성 예제


결과



설명

A,B,D는 쉽게 이해가 갈 것이다. 2행 3열을 생성하는 것인데

C는 다른점이 3채널이라는 것이다. 

그래서 C는 3열이지만 행에 9개의 정수가 들어가 있다.


또 특이점은 A, A1 이다. 인자 없는 생성자를 통해서 했을때에는 행렬이 랜덤한 수가 들어가는 것으로 보인다.

이 점에대해서는.. 책에 설명이 되어 있지 않아... 패스...

반응형

'ETC > OpenCV' 카테고리의 다른 글

[OpenCV] Mat::create()  (0) 2016.10.20
[OpenCV] Mat 클래스 행렬 생성 2  (0) 2016.10.20
[OpenCV] Range 클래스  (0) 2016.10.20
[OpenCV] Scalar_ 클래스  (0) 2016.10.19
[OpenCV] Vec 클래스  (0) 2016.10.19
반응형

Range 클래스는 Mat 클래스에서 행 또는 열의 범위를 지정하는 템플릿 클래스이다.

start는 포함이고 end는 포함하지 않는다.

Range(0,2)의 범위는 0,1 이다.


예제


결과


예제를 하면서 Range가 어떻게 쓰이는지 알 수 있다.

Mat(행 범위, 열범위) 이렇게 된다는 것을.. 


슬슬 나에게 필요한 Mat 클래스에 대해 정리할 때가 온것 같다..




반응형

'ETC > OpenCV' 카테고리의 다른 글

[OpenCV] Mat 클래스 행렬 생성 2  (0) 2016.10.20
[OpenCV] Mat 클래스 행렬 생성 1  (0) 2016.10.20
[OpenCV] Scalar_ 클래스  (0) 2016.10.19
[OpenCV] Vec 클래스  (0) 2016.10.19
[OpenCV] Matx 클래스  (0) 2016.10.19
반응형

Scalar_ 클래스는 Vec 클래스에서 상속받은 4개의 요소를 갖는 템플릿 클래스

Scalar_와 CvScalar 사이의 변환이 가능하다.

typedef Scalar_<double> Scalar 로 정의되어 있어 double형에 대해서는 Scalar를 사용할 수 있다.


예제


결과


반응형

'ETC > OpenCV' 카테고리의 다른 글

[OpenCV] Mat 클래스 행렬 생성 1  (0) 2016.10.20
[OpenCV] Range 클래스  (0) 2016.10.20
[OpenCV] Vec 클래스  (0) 2016.10.19
[OpenCV] Matx 클래스  (0) 2016.10.19
[OpenCV] RotatedRect 클래스  (0) 2016.10.19

+ Recent posts