Microsoft MVP성태의 닷넷 이야기
안녕하세요. 초보개발자입니다. [링크 복사], [링크+제목 복사]
조회: 1823
글쓴 사람
게스트
홈페이지
첨부 파일
안녕하세요. 왕초보 c# 나홀로 개발자입니다.
현재 윈폼으로 블루스크린의 크로마키 기능(사진에서 파란색 배경을 제거하고 다른 이미지의 배경을 넣는 것 / 영상이 아닌 사진의 크로마키입니다.)을 개발하려고 하는데
어디에도 도움을 요청할때도 없고 중간에 막혀서(파란색을 제거하는 부분) 여쭤보고자 이렇게 적어봅니다.


[질문사항]
1. 사진의 크로마키 기능을 개발하려고 하면 어떤 방법으로 개발해야 하나요? 검색을 해보니 openCV, kinect sdk 로 크로마키를 하라는 얘기가 나오는데 이런것으로 크로마키를 하는것이 맞나요?
2. 구글 검색해서 아래 소스를 사용하여 이용하니 파란색은 제거가 되는데 파란색 계열의 모든 부분이 제거가 됩니다. 소스코드 내 조건문의 수치를 조절해서 했는데도 사진 속 사람이 파란색 계열의 넥타이를 했는데 이것도 모두 지워지네요.(사진첨부) 사진의 지우고 싶은 배경의 픽셀 하나를 가져와서 그것을 기반으로 범위를 산정해서 지우고 싶은데 어떤식으로 무엇을 참고해야 할까요?
3. 도움이 될만한 사이트나 조언을 해주시면 정말정말 감사하겠습니다.

감사합니다.


        public void RemoveBackground()
        {
            path = Directory.GetParent(Environment.CurrentDirectory).Parent.FullName;
            pathImage = Path.Combine(path, "ui\\green\\green.jpg");
            pathImageOutput = Path.Combine(path, "ui\\green\\green2.jpg");

            Bitmap original = new Bitmap(pathImage);
            Bitmap clone = new Bitmap(original.Width, original.Height, PixelFormat.Format32bppArgb);

            {
                using (original)
                using (Graphics gr = Graphics.FromImage(clone))
                {
                    gr.DrawImage(original, new Rectangle(0, 0, clone.Width, clone.Height));
                }

                var data = clone.LockBits(new Rectangle(0, 0, clone.Width, clone.Height), ImageLockMode.ReadWrite, clone.PixelFormat);



                var bytes = Math.Abs(data.Stride) * clone.Height;
                byte[] rgba = new byte[bytes];
                System.Runtime.InteropServices.Marshal.Copy(data.Scan0, rgba, 0, bytes);

                var pixels = Enumerable.Range(0, rgba.Length / 4).Select(x => new
                {
                    B = rgba[x * 4],
                    G = rgba[(x * 4) + 1],
                    R = rgba[(x * 4) + 2],
                    A = rgba[(x * 4) + 3],
                    MakeTransparent = new Action(() => rgba[(x * 4) + 3] = 0)
                });


                pixels
                    .AsParallel()
                    .ForAll(p =>
                    {
                        byte max = Math.Max(Math.Max(p.R, p.G), p.B);
                        byte min = Math.Min(Math.Min(p.R, p.G), p.B);

                        if (p.B != min && (p.B == max || max - p.B < 90) && (max - min) > 100)
                        {
                                p.MakeTransparent();
                        }

                    });

                System.Runtime.InteropServices.Marshal.Copy(rgba, 0, data.Scan0, bytes);
                clone.UnlockBits(data);
                clone.Save(pathImageOutput, ImageFormat.Png);

                clone.Dispose();
                original.Dispose();

       
            }


        }








donaricano-btn



[최초 등록일: ]
[최종 수정일: 2/23/2019 ]


비밀번호

댓글 쓴 사람
 



2019-02-24 01시00분
관련해서 찾아 보면 방송조차도 실시간으로 크로마 키 처리하다가 사람의 옷에 색상이 같은 것이 있으면 투명처리되어 배경이 투영된다고 하니, 이런 간단한 소스 코드에서는 지워지는 게 당연할 것입니다. 딱히 저도 영상 처리를 심도 있게 전공한 것은 아니므로 더 이상 조언드릴 것이 없군요. 관련해서는 다른 분들께 질문을 하시는 것이 좋겠습니다.
정성태
2019-02-24 01시18분
[게스트] 네~ 알겠습니다. 감사합니다. ^^
[손님]
2019-02-24 01시35분
[dimohy] 특정한 색을 감지하는것은 조명의 위치나 촬영 위치에 따라 밝기가 달라지므로 쉽지만은 않습니다만 크로마키로 선택하는 색이 일반적으로 잘 사용하지 않고 왜곡이 적은 색을 선택하기 때문에 결과물이 좋아야 합니다. 사람의 눈으로 봤을 때 배경색과 넥타이색이 엄연히 차이가 나므로 코드로 크로마키 영역을 추출하는것은 첨부한 영상 기준으로 가능해 보이네요. 과거 볼링핀 인식 처리를 이미지로 한 결험이ㅜ있어서 조만간 뎃글로 공유해볼께요
[손님]

1  2  3  4  5  6  7  8  9  10  11  [12]  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
5131강용규2/25/20191608c# 개발자입니다. 타이머 질문드립니다. [1]
5130노인코래방2/25/20193673C#에서 가장 좋은 성능을 보이는 파일 읽고 쓰는 방법이 무엇인가요? [2]
5129진우2/23/20192263닷넷 32비트 기반에서 메모리 부족으로 프로그램이 죽는경우 문의 [2]
5128게스트2/23/20191823안녕하세요. 초보개발자입니다. [3]파일 다운로드1
5127c#2/20/20191575책에 예제 문의드립니다. [2]
5125게스트2/19/20191454delegate를 활용한 event 를 적절히 불러오고 싶습니다. [2]
5124정근화2/12/20191490윈도우 서버2003 환경 오류 [2]
5123김주현2/8/20191258MS LUIS 에 대한 소개 하실 계획이 있으신가요? [1]
5122jakard2/1/20192077Clickonce 배포 후 Command 실행 [2]파일 다운로드1
5121엔벌이1/31/20191904C# DataGridView의 MDB파일 함수? ArrayList? [1]파일 다운로드1
5120임우진1/30/20191842웹에서 응용프로그램 바로 실행하기 관련 브라우저에서 파라미터가 넘어오지 않습니다.ㅜㅜ [2]
5119손님1/29/20192018교재에 오탈자 있어 알려드리려 합니다 [1]
5118WPF꿈나무1/26/20191419GetHashCode 메서드에 대해서 [1]
5117하주형1/25/20191924List<int>에 대한 이해가 잘안됩니다. [5]
5116게스트1/24/20191494asp.net 관련 gridview webform 질문 드립니다. [1]파일 다운로드1
5115SoulToMind1/24/20191985투명 패널 질문드립니다. [2]
5114박현일1/20/20191920WPF DataContext 관련 초보 질문을 드려봅니다.^^ [5]
5113하주형1/20/20191532안녕하세요 시작하세요 C# 인코딩관련 질문드립니다. [1]
5112손성배1/19/20196987안녕하세요 cp949 인스톨시 오류입니다... 너무 힘들어요 [5]
5111게스트1/10/20191896암호화 라이센스 관련 문의 드립니다. [1]
5110WPF꿈나무1/9/20191656Thread Abort 함수 사용시 [2]
5109닷넷개발1/9/20191897thread 관련 질문 예제.. [2]파일 다운로드1
5108닷넷개발1/9/20192309thread 관련 질문 드립니다.. [4]
5107우코아1/4/20192609WPF에서 로딩중 이미지를 구현 - Project [5]파일 다운로드1
5106우코아1/3/20191903WPF에서 로딩중 이미지를 구현 - Source [1]
5104우코아1/1/20192871WPF에서 로딩중 이미지를 구현 [4]
1  2  3  4  5  6  7  8  9  10  11  [12]  13  14  15  ...