※ branch



report.hwp 파일이 있는데 클라이언트에게 다른 내용의 파일을 제공해야 해서 report1_client.hwp를 따로 만들었다. 각각 업데이트를 해 report2_client.hwp와 report2.hwp가 최종 생성됬다. 후에 다시 이 둘을 합쳐야 되는 상황이 와 report3.hwp로 이 둘을 합쳤다. 위에서 report1_client.hwp와 report1.hwp로 분기되는 것을 branch를 만든다라고 한다.

기존에는 하나의 branch를 가지고 있고 branch를 만들면 추가적으로 새 branch가 생성된다.


- branch 사용 목적

1. 원래 프로그램의 소스코드 변경 없이 고객을 위해서 커스텀 마이닝을 해야 할 때 사용

2. 누군가가 특정 기능의 개발을 부탁했는 데 개발자 생각에는 필요가 없는 기능이여서 나중에 버려야 될 것 같은 경우 사용

3. 실제로 서버에 올라가 있는 프로그램을 추가적으로 테스트 버전으로 업데이트해야 할 경우



※ branch 만들기


 git branch : 현재 있는 branch를 보여준다. 현재 master(기본 브랜치) 브랜치이다.


위 명령어는 branch를 만드는 명령어로 새로운 branch가 생긴 것을 알 수 있다.


git checkout "이름"은 "이름" 브랜치로 변경하는 명령어로 실제로 "exp_1" branch로 바뀐 것을 알 수 있다. 또한 "master branch에 있는 버전이 그대로 복사된 것을 알 수 있다.


"exp_1" branch에서 commit 한 후 "master" branch로 간 다음 로그를 보니 "exp_1"에서 커밋한 버전 정보가 없고 그대로 "master" 버전이 유지된다.


*git commit -m "커밋 메시지" : 따로 vim으로 커밋 메시지를 작성하지 않고 바로 작성 가능하다.

*git commit -a : git add를 하지 않고 파일들을 커밋한다. 한 번도 add하지 않는 파일은 커밋이 되지 않는다.


위 두개의 사진은 "master" branch에서 "exp_1" branch로 상태를 바꾸는 사진이다. 바뀔 때 실제 파일 탐색기 내용도 branch에 맞춰서 바뀌는 것을 알 수 있다.

해당 포스트는 "열혈강의 영상처리 프로그래밍" 책의 내용을 요약한 것이다.



※ 영상의 채널 단위 접근과 변환

영상의 각 채널을 따로 분리하여 다뤄야 할 때가 있다. 예로 컬러 영상의 R채널만을 화면 출력으로 보고 싶다고 할 때 특정 채널만을 출력할 수 있는 화면 출력 함수를 만들어도 좋지만, 컬러 영상에서 원하는 채널을 추출하는 함수를 만든다면 다방면에서 사용할 수 있다. 또한, 고급 영상 처리 알고리즘을 구현하다 보면 여러 개의 채널을 가지는 영상을 다루어야 하는데 이 때 영상에서 특정 채널을 추출하는 기능이 있다면 편리할 것이다.


<채널 추출 함수>

	CMyImage<T> GetChannelImg(int nChannel) const
	{
		CMyImage<T> dst(m_nWidth, m_nHeight);

		for (int r=0 ; r<m_nHeight ; r++)
		{
			T* pSrc = GetPtr(r);
			T* pDst = dst.GetPtr(r);

			int idx = nChannel;
			for (int c=0 ; c<m_nWidth ; c++)
			{
				pDst[c] = pSrc[idx];
				idx += m_nChannels;
			}
		}

		return dst;
	}

매개 변수로 채널 번호를 넣으면 해당 채널을 단일 채널 영상, 즉 회색조 영상으로 반환한다.



<채널 삽입 함수>

void PutChannelImg(const CMyImage<T>& src, int nChannel)
	{
		int nWidth  = src.GetWidth();
		int nHeight = src.GetHeight();

		for (int r=0 ; r<nHeight ; r++)
		{
			T* pSrc = src.GetPtr(r);
			T* pDst = GetPtr(r);

			int idx = nChannel;
			for (int c=0 ; c<nWidth ; c++)
			{
				pDst[idx] = pSrc[c];
				idx += m_nChannels;
			}
		}
	}

회색조 영상과 함께 채널 번호를 넣으면 번호에 해당하는 영상 채널을 입력한 회색조 영상으로 대체한다.

+ Recent posts