728x90
300x250

[C#](OpenCVSharp 4) - c#에서 OpenCV 카메라 열기와 처음 시작하기

 

안녕하세요. C#에서 OpenCV를 활용할 수 있는 방법에 대해서 소개하려고 합니다.

 

 

프로젝트->NuGet 패키지 관리를 클릭하면 위의 그림을 살펴볼 수 있습니다.

OpenCVSharp4라고 검색한 후 설치하면 됩니다. 

 

 


2. 몇 가지 흥미로운 문제

 

소스코드는 다음과 같습니다.

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenCvSharp;


namespace OpenCV_Sample
{

    public partial class Form1 : Form
    {
        VideoCapture video;
        Mat frame = new Mat();

  
        public Form1()
        {
            InitializeComponent();
        }

 

}

 

정상적인 경우라면, 자연스럽게 빈화면을 출력해야 합니다.

그러나 아래처럼 오류가 발생합니다.

 

"내부 예외 2개 중 2개"
...... DllNotFoundException: DLL 'OpencvSharpExtern'을(를) 로드할 수 없습니다. 지정된 모듈을 찾을 수 없습니다.

 

 

 

 

 

아래의 사이트에서 프로젝트를 다운받습니다.

https://github.com/shimat/opencvsharp/releases

 

 

CPU 기종과 운영체제 기종에 맞춰서 다운받길 바랍니다.

64bit 운영체제와 64비트 CPU를 사용하고 있어서 OpenCVSharp-4.1.1-x64-20191023.zip을 내려받습니다.

 

[첨부(Attachment)]

OpenCVSharp4-master64bit.z01

OpenCVSharp4-master64bit.z02

OpenCVSharp4-master64bit.zip

 

 

압축해제한 폴더에서 "OpenCvSharpExtern.dll"을 복사합니다. 용량이 꽤 됩니다. 59,527KB(약 60Mb) 정도 됩니다.

작업중인 프로젝트 폴더에 복사해서 붙여넣어줍니다.

 

경로 찾는 방법
C:\사용자\{사용자명}\source\repos\{프로젝트명}\{프로젝트명}

 

 

다음의 단계를 그림에 맞춰서 진행해줍니다.

 

 

 

 

 

OpenCvSharpExtern.dll을 선택합니다.

 

 

그리고 우측 솔루션 탐색기에서 OpenCVSharpExtern.dll을 클릭 후 속성을 바꿔줍니다.

"출력 디렉터리에 복사"에 "항상 복사"로 바꿔줍니다.

 


2-1. dll 기종(예: 64bit이다. 또는 32bit이다.)에 맞춰주기

 

지금의 작업은 OpenCV의 기종에 맞춰서 빌드 환경을 바꿔줄 것입니다.

"Any CPU"를 클릭 후 "구성관리자"를 클릭합니다.

 

 

플랫폼에서 "Any CPU"를 클릭 후 "<새로 만들기...>"을 클릭합니다.

 

 

x64로 변경하고 확인을 클릭합니다.

 

 

변경이 된 것을 확인할 수 있습니다.

 

 


3. 사용자 인터페이스(User Interface)

 

PictureBoxlpl을 배치하고, Timer를 배치합니다.

 

 

 

 


4. 소스코드(Source Code)

 

소스코드는 아래와 같습니다.

 

namespace OpenCV_Sample
{
    public partial class Form1 : Form
    {
        VideoCapture video;
        Mat frame = new Mat();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                video = new VideoCapture(0);
                video.FrameWidth = 640;
                video.FrameHeight = 480;
            }
            catch
            {
                timer1.Enabled = false;
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            video.Read(frame);
            pictureBoxIpl1.ImageIpl = frame;
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            frame.Dispose();
        }

    }

}

 

카메라를 시연하도록 하겠습니다. 얼굴은 모자이크 하였습니다.

 

 

 

[첨부(Attachment)]

OpenCV-Sample.z01

OpenCV-Sample.z02

OpenCV-Sample.z03

OpenCV-Sample.zip

 

 

반응형
728x90
300x250
[MySQL(또는 MariaDB)] Debian 10에서 외부 접속 허용하기

 

1. 외부 접속 허용해주기

 

$ sudo vi /etc/mysql/my.cnf을 열어보면 bind-address = 127.0.0.1 라는 부분이 있다.
이 부분을 주석 처리 하고 아래처럼 해준다.

 

#bind-address            = 127.0.0.1
bind-address            = *

 

2. Maria DB(또는 MySQL)에서 네트워크 대역 허용해주기

 

모든 IP 대역 네트워크

INSERT INTO mysql.user (host,user,password) VALUES ('%','root',password('패스워드'));
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES; 


특정 IP 대역 네트워크

INSERT INTO mysql.user (host,user,password) VALUES ('192.168.0.%','root',password('패스워드'));
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.0.%';
FLUSH PRIVILEGES;


3. 복구

 

모든 IP 대역 네트워크 복구하기

 

DELETE FROM mysql.user WHERE Host='%' AND User='root';
FLUSH PRIVILEGES;


특정 IP 대역 네트워크 복구하기

 

DELETE FROM mysql.user WHERE Host='192.168.0.%' AND User='root';
FLUSH PRIVILEGES;

 

 


[자주 나오는 오류]

 

ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value
Mysql 버전이 높아지면서 보안관련 인한 오류입니다.

User 생성시 Host, User ,Password, ssl_cipher, x509_issuer, x509_subject 를 입력 해 주셔야 합니다.
ssl_cipher, x509_issuer, x509_subject 값은 '' 빈값을 입력하세요.

ex)
 insert into user (Host, User, Password, ssl_cipher, x509_issuer, x509_subject )
values('localhost','사용자명',password('비밀번호'),'','','');

 

ERROR 1364 (HY000): Field 'authentication_string' doesn't have a default value

* mysql 5.5 에서 user 생성시 authentication_string 필드 추가. '' 값으로 넣어 주세요.


ex)
insert into user (Host, User, Password, ssl_cipher, x509_issuer, x509_subject, authentication_string)

values('localhost','사용자명', password('비밀번호'),'','','','');

반응형
728x90
300x250
[GNU(리눅스) 데비안 10.1 - 파일/폴더 압축 및 해제

 

데비안 10.1에서 파일/폴더 압축 및 해제하는 방법에 대해서 소개합니다.

데비안 10.1에서 .zip 등을 사용하려면 먼저 설치를 해주어야 합니다.

 

apt install zip

......

 

아래의 사용 방법은 동일합니다.

 

.zip

압축

$ zip -r [압축파일명.zip] [압축할 파일/디렉토리]


압축 해제

$ unzip [압축파일명.zip]


.tar

압축

$ tar cf [압축파일명.tar] [압축할 파일/디렉토리]


압축 해제

$ tar xf [압축파일명.tar]


tar.gz

압축

$ tar zcf [압축파일명.tar.gz] [압축할 파일/디렉토리]


압축 해제

$ tar xfz [압축파일명.tar.gz]


.tar.bz2

압축

$ tar jcf [압축파일명.tar.bz2] [압축할 파일/디렉토리]


압축 해제

$ tar xfj [압축파일명.tar.bz2]


.tar.xz - 이중으로 압축을 풀어야 합니다.

압축 해제 (.xz 압축 해제 -> tar 압축 해제)

$ xz -d [압축파일명.tar.xz]

$ tar -xf [압축파일명.tar]

반응형
728x90
300x250

[수학(Math)] 13. 행렬의 전치행렬과 대각 합

 

행렬 의 전치행렬의 정의 및 기본적인 성질, 대칭행렬과 교대행렬의 성질을 살펴본다.

또한 정사각행렬에서만 정의되는 개념인 대각합의 정의와 기본적인 성질들에 대하여 살펴본다.

 

정의)

행렬 의 행과 열을 바꾸어 얻은 행렬 의 전치행렬(transpose matrix)이라고 하고 로 표시한다. (이때, 이다.)

 

 

참고) 정의에 의하여 의 전치행렬은 행을 열로 이동시켜 얻을 수 있다. 따라서 의 크기가 이면 의 크기는 이 된다.

 

(예제) 행렬 의 전치행렬을 구하면 다음과 같다.

 

 

 

(정리)

두 행렬 와 실수 에 대하여 다음이 성립한다.

 

(1)

(2)

(3)

 

(증명) 각 행렬의 성분을 으로 놓고 좌변과 우변에 놓인 행렬의 -성분이 서로 같음을 보임으로써 상등관계를 증명할 수 있다.

 

(1) -성분은 -성분이고 이는 -성분이므로 이다.

(2) -성분은 -성분이므로 이다. 이는 -성분과 의 -성분의 합이 되므로 -성분과 같다.

(3) -성분은 -성분이므로 이다. 이는 -성분과 같으므로 이다.

 

(예제)

두 행렬

와 실수 에 대하여

이다. 따라서 다음이 성립한다.

 

 

 

 

(정리)
두 행렬 에 대하여 다음이 성립한다.


(증명) 각 행렬의 성분을 로 놓으면 -성분은 -성분이므로 이다.

그런데 -성분이 되므로 정리가 성립한다.

 

(예제)

두 행렬 에 대하여

이므로

이다.

 

(정의)

정사각행렬 가 다음 조건을 만족하면 를 대칭행렬(symmetric matrix)이라고 한다.

 

(참고) 대칭행렬 는 주대각 성분들을 연결하는 선분을 기준으로 하여 서로 대칭인 성분들로 이루어져 있다.

 

 

(예제1) 행렬 의 전치행렬은 이므로 는 대칭행렬이다.

 

(예제2) 행렬 의 전치행렬은 이므로 는 대칭행렬이다.

 

(예제3) 행렬  더블클릭을 하시면 수식을 수정할 수 있습니다.가 대각행렬이면 이므로 는 대칭행렬이다.

 

 

(정의)

정사각행렬 가 다음 조건을 만족하면 를 교대행렬(Alternating matrix)이라고 한다.

 

(참고) 정사각행렬 가 교대행렬이라면 교대행렬의 정의로부터 이 된다.

따라서 임을 알 수 있다. 즉, 주 대각성분은 모두 0이다.

 

(예제1) 행렬 의 전치행렬 이므로 는 교대행렬이다.

 

(예제2) 행렬 의 전치행렬은 이므로 는 교대행렬이다.

 

(예제3) 정사각행렬 가 주어지면 다음 과정을 통하여 대칭행렬과 교대행렬을 항상 만들 수 있다. 실제로 행렬 를 다음과 같이 정의 하자.

 

 

그러면 다음 관계식이 성립한다.

 

 

따라서 가 되어 행렬 는 대칭행렬이 되고 행렬 는 교대행렬이 된다.

이때, 실수 에 대하여 행렬 와 행렬  또한 각각 대칭행렬이 됨을 알 수 있다.

 

(정리)

정사각행렬 는 대칭행렬과 교대행렬의 합으로 항상 나타낼 수 있다.

 

(증명)

행렬 는 대칭행렬이고 행렬 는 교대행렬이다. 또한 행렬

으로 나타내어지므로 정사각행렬 는 대칭행렬과 교대행렬의 합으로 항상 나타낼 수 있다.

 

(예제)

행렬 에 대하여 이므로

이다. 따라서 행렬 는 다음과 같이 대칭행렬과 교대행렬의 합으로 나타낼 수 있다.

 

 

(정의)

정사각행렬 에 대하여 다음과 같이 정의된 실수 의 대각합(trace)이라고 한다.

 

 

(참고) 행렬 의 대각합은 정사각행렬들의 집합 에서 다음과 같이 정의된 함수임을 알 수 있다.

 

 

(예제1) 행렬 의 대각합은 다음과 같다.

 

 

(예제2) 행렬 의 대각합은 다음과 같다.

 

 

(예제3) 정사각행렬 가 교대행렬이라면 이므로 주대각성분이 모두 0이다. 따라서 의 대각합은 다음과 같다.

 

 

정사각행렬의 대각합은 다음 정리에서 알 수 있듯이 덧셈과 스칼라 곱셈을 유지시킨다.

 

(정리)

정사각행렬 와 실수 에 대하여 다음이 성립한다.

(1)

(2)

 

(증명) 각 행렬의 성분을 로 놓으면 다음과 같이 증명할 수 있다.

 

(1)

 

(2)

 

(참고) 대각합은 행렬 의 덧셈연산은 유지시키지만 곱셈연산은 유지 시키지는 않는다. 즉,

 

(예제) 두 행렬 에 대하여 는 다음과 같다.

 

따라서

 

 

(정리)

정사각행렬 에 대하여 다음이 성립한다.

 

(증명) 각 행렬의 성분을 로 놓으면 다음 등식이 성립한다.

 

따라서 이 증명된다.

 

(예제) 두 행렬 에 대하여 는 다음과 같다.

 

 

따라서

 

 

(정리)

정사각행렬 에 대하여 다음이 성립한다.

 

(증명) 행렬의 성분을 로 놓으면 의 주 대각성분은 의 주 대각성분과 같으므로 다음 등식이 성립한다.

 

 

 

(예제) 행렬 에 대하여 이므로

 

 


(연습문제)

 

1. 두 행렬 에 대하여 다음을 구하여라.

 

(1)                                                   (2)

 

(3)

 

2. 두 행렬 에 대하여 다음을 구하여라.

 

(1)

 

 

 

 

 

반응형
728x90
300x250
[이야기(Story)] 소스코드 라인 계산 프로젝트 - CLOC

 

소스코드 라인 계산을 해주는 프로젝트입니다.

http://cloc.sourceforge.net/

 


1. 프로젝트 소개

 

그림 1) cloc 소스포지 웹 사이트

 

 

그림 2) 라이선스와 안정화된 버전에 대한 설명

 

참고로 CLOC 프로젝트는 GNU v2 라이선스를 적용받습니다.

https://sourceforge.net/projects/cloc/files/cloc/v1.64/

 


2. 첨부(Attachment)

 

cloc-1.64.zip

cloc-1.64.pl

cloc-1.64.tar.gz

README.txt

release-1_64.txt

 


3. 사용방법(Guide)

 

 

 

 


4. 참고자료(Reference)

 

1. CLOC -- Count Lines of Code, Accessed by 2019-10-08, Last Modified 2015, http://cloc.sourceforge.net/

2. cloc - Browse /cloc/v1.64 at SourceForge.net, Accessed by 2019-10-08, Last Modified 2015, https://sourceforge.net/projects/cloc/files/cloc/v1.64/

반응형
728x90
300x250

[수학(Math)] 12. 행렬의 연산에 대한 성질

 

행렬들의 연산에 대한 기본적인 성질들에 대하여 살펴본다.

행렬들의 덧셈과 스칼라 곱셈, 그리고 상등관계의 정의에 의하여 집합 내에서 다음과 같은 성질이 성립함을 알 수 있다.

 

(정리1)
세 행렬  와 실수 에 대하여 다음이 성립한다.

 

 


 

[증명]

 

                        

                     

 

                      

 

행렬의 곱이 정의된다고 가정했을 때 실수에서 결합법칙과 배분법칙이 성립하는 것과 마찬가지로 곱에 대한 결합법칙과 배분법칙이 성립한다는 것을 다음 정리에 의하여 알 수 있다.

 

(정리2)
행렬 에 대하여 다음이 성립한다.


 

[증명]

행렬의 성분을 각각 로 놓으면 -성분은 이므로

-성분은 이다.

또한, 행렬 -성분은 이고 -성분은 이므로 -성분은 이다. 따라서 행렬 -성분이 모두 같기 때문에 등식이 성립한다.

 

(정리3)

행렬 에 대하여 다음이 성립한다.

 

 

[증명]

행렬의 성분을 각각 로 놓으면 -성분은 이므로 -성분은 이다.

또한, 행렬 -성분은 이고 -성분은 이므로 -성분은

이다. 따라서 행렬 -성분이 모두 같기 때문에 등식이 성립한다.

 

(정리4)

세 행렬 , , 에 대하여 다음이 성립한다.

 

 

 

[증명]

각 행렬의 성분을 , , 으로 놓으면 행렬 -성분은 이므로

-성분은 이다.

또한, 행렬 -성분은 이므로 -성분은

이다.

그런데

이므로 행렬 의 모든 -성분이 같다. 따라서 정리가 증명된다.

실수에서는 곱에 대하여 교환법칙이 성립하지만 행렬은 곱에 대하여 교환법칙이 성립하지 않는다는 사실을 다음 예제를 통하여 알 수 있다.

 

(예제)

두 행렬 에 대하여 는 각각 다음과 같다.

 

 

따라서 이다.

 

(정리)

행렬 에 대하여 연산 이 정의될 때 다음이 성립한다.

 

 

 

 

(예제)

다음 두 행렬의 곱 를 구하여라

 

 

[풀이]

행렬 을 각각 다음과 같이 놓자.

 

 

 

그러면

 

이다. 따라서 는 다음과 같다.

 

반응형
728x90
300x250
[프로그래밍 퀴즈(Quiz)] 프로그래밍 기초 퀴즈(C++)


초급적인 문제입니다.



(입력1)


입력

출력

12345

5,4,3,2,1



(소스코드)


#include <iostream>
#include <string>
#include <vector>
#include <math.h>

using namespace std;

vector<int> solution(long long n) {
    vector<int> answer;
    string strNumber;

    long long conversionNumber;
    int div = 10;
    int size = 0;
    int tmp = n;

    while (tmp > 0) {

        tmp = tmp / 10;
        size++;
    }

    strNumber = to_string(n);

    while (size > 0) {

        conversionNumber = std::stoll(strNumber.substr((size - 1), 1));
        //cout << strNumber.substr( (size - 1), 1) << endl;
        answer.push_back(conversionNumber);
        size--;
    }

    return answer;
}

int main() {

    solution(12345);

}


반응형
728x90
300x250
[수학(Math)] 11. 행렬의 정의 및 연산(Matrix)

 

행렬에 대해서 가볍게 소개한다.

 

참고하면 도움이 되는 주제: 선형대수학(Linear Algebra)
-> 컴퓨터공학: 컴퓨터 그래픽스, OpenGL.
-> 경영학/산업공학: Operation Research(OR)
-> 회로 최적화
-> 물리(벡터)

-> 등.

 

(정의1)

임의의 자연수 에 대하여 개의 실수  를 다음과 같이 직사각형 모양으로 나열해 놓은 것을 실수를 성분으로 갖고 크기가 인 행렬(matrix)이라고 한다.

 

 

 

이때, 각각의 를 행렬 -성분 이라고 한다.

또한 실수를 성분으로 갖는 모든 행렬들의 집합을 로 표시한다.


즉,

 

(정의2)

행렬 개의 수평성분과 개의 수직 성분들로 이루어지는데 특히 번째 수평성분을 행렬

이라고 하고 로 표시한다. 또한 행렬 번째 수직성분을 행렬 번째 열이라고 하고 로 표시한다. 즉, 행렬 번째 행과 번째 열은 각각 다음과 같다.

 

 

예) 행렬 는 다음과 같은 두 개의 행과 두 개의 열로 이루어진 크기가 인 행렬이다.

 

,

 

 

다음은 행렬의 덧셈에 대한 항등원의 역할을 하는 영행렬의 정의에 대해 살펴보자.

 

(정의3)

 

행렬 의 모든 -성분이 0이면 즉, 이면 행렬 를 영행렬(zero matrix)이라고 하고

(또는 )으로 표시한다.

 

(정의4)

행렬 의 행의 수 과 열의 수 이 서로 같으면, 행렬 차의 정사각행렬(square matrix)이라고 한다.

차의 정사각행렬 에서 를 행렬 의 주 대각성분이라고 한다.

 

 

(정의5)

정사각행렬 의 주 대각성분이 모두 1이고 나머지 성분이 모두 0이면 행렬 를 항등행렬(단위행렬, identity matrix)이라고 하고,

으로 표시한다. 즉, 항등행렬 은 다음과 같다.


 

 

[참고] 실수

 

로 정의하면 차의 항등행렬은 으로 나타낼 수 있다.

 

 

(정의6)

정사각행렬 가 다음 조건을 만족하면 상삼각행렬(upper triangular matrix)이라고 한다.

 

 

[참고] 정의에 의하여 정사각행렬 가 상삼각행렬이면 주 대각성분 아래에 놓여있는 성분들은 모두 0이다.

 

예) 행렬 

는 상삼각행렬이다.

 

(정의7)

정사각행렬 가 다음 조건을 만족하면 하삼각행렬(lower triangular matrix)이라고 한다.

 

 

[참고] 정의에 의하여 정사각행렬 가 하삼각행렬이면 주 대각성분 위에 놓여있는 성분들은 모두 0이다.

 

예) 행렬

는 하삼각행렬이다.

 

 

(정의8)

 정사각행렬 가 다음 조건을 만족하면 대각행렬(diagonal matrix)이라고 한다.

 

 

 

그리고 이때 으로 표시한다.

 

 

[참고] 정의에 의하여 정사각행렬 가 대각행렬이면 주 대각성분 이외의 성분들이 0이다. 또한 대각행렬은 상삼각행렬이고 동시에 하삼각행렬이다.

 

예) 행렬

는 대각행렬이다.

 

 

두 행렬의 상등관계에 대해서 소개한다.

 

(정의9)
두 행렬 의 대응되는 모든 성분이 같으면, 즉,

이면 행렬 는 같은 행렬이라고 하고 로 나타낸다.

 

예) 두 행렬

에 대하여 상등관계 가 성립하기 위한 실수 의 값은 다음과 같이 구할 수 있다.

 

 

 

집합 에 속하는 행렬들 사이에서 정의되는 연산에 대하여 살펴보자.

 

(정의10)

두 행렬 에 대하여 덧셈과 실수 에 대한 스칼라곱을 다음과 같이 정의한다.

 

 

(예제)

 

두 행렬

에 대하여 는 각각 다음과 같다.

 

 

 

 

 

(정의11)

두 행렬 의 곱을 다음과 같이 정의한다.

 

 

 

[참고]

정의에 의하여 두 개의 행렬 의 곱 의 열의 갯수와 의 행의 갯수가 같을 때에만 정의됨을 알 수 있다.

 

 

(예제) 두 행렬

에 대하여 는 다음과 같다.

 

 

 

(예제)

 

두 행렬

에 대하여 의 열의 갯수는 2이고 의 행의 갯수는 1이므로 곱 를 정의할 수 없다.

 

(예제)

 

두 행렬 에 대하여 다음이 성립함을 보여라.

 

 

=> (풀이)

 

두 행렬

에 대하여 이지만 이고 이다.

 

 


(연습 문제)

 

1. 두 행렬 에 대하여 다음을 구하여라.

 

                                              

 

 

 

 

 

 

2. 두 행렬 에 대하여 다음을 구하여라.

 

 

                                           

 

 

 

 

3. 두 행렬

에 대하여 다음을 구하여라.

 

                              

 

 

 

 

4. 다음 식을 만족하는 실수 를 구하여라.

 

 

 

반응형

+ Recent posts