Microsoft MVP성태의 닷넷 이야기
안녕하세요. 초보개발자입니다. [링크 복사], [링크+제목 복사]
조회: 7823
글쓴 사람
게스트
홈페이지
첨부 파일

안녕하세요. 왕초보 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();

       
            }


        }












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


비밀번호

댓글 작성자
 



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

... 16  17  18  19  20  21  22  23  24  25  26  27  [28]  29  30  ...
NoWriterDateCnt.TitleFile(s)
5177농상6/13/20199574멀티스레드 건의 [2]
5176이선호6/13/20199162안녕하세요. 닷넷 문제로 검색하다 알게되어 들어왔습니다. 현재 IIS 문제가 있어 질문드립니다. [1]
5175Chobo6/12/20199141WPF Ellipse 그리기! [3]
5174농상6/11/20198489ThreadPool 조인에 관해 [1]
5173전우치6/9/20198878공유 리소스에 대한 스레드 동기화 처리를 위해서 lock 이용 시 문의 [3]
5172김대훈6/7/20197691너무힘드네요 공부에 대한조언부탁드립니다 [2]
5171조남석6/4/20197396EX)11-2(treeview)에 대한 질문입니다. [3]
5170레리6/4/20198001Setup 프로젝트 레지스트리 설정 관련 질문입니다. [1]파일 다운로드1
5169농상6/3/20197774멀티스레드 파라미터 관련 [2]
5168익명유저5/30/20197053항상 정말 감사드립니다... [1]
5167WPF5/23/20197981질문드립니다. [1]
5165이대희5/22/20197129Visual Studio 설치 구성요소 문의 (C# 7.3 개정판 관련) [1]
5164레드5/21/20198642실행 과정과 실행파일 디버그 시 Icon변경 질문드립니다. [5]
5163이대희5/20/20196935시작하세요 C# 7.3 프로그래밍 책 도착했습니다. [1]
5162채홍윤5/14/20199772Mono Develop window 설치 [6]
5161정대영5/13/20197718VS 2013에서 C#6.0(.netFramwork 4.6.1) $ 디버깅 오류 [1]
5160초보개발자5/13/20198708wcf 관련 국내 서적 살만한 책이 있나요? [2]
5159sdh25/9/20198211VS 2010 버전에서 생성한 DLL을 VS 2017버전에서 실행 시 에러 [2]
5158sdh5/8/20197121Visual studio 2010 버전에서 생성한 Project를 Visual studio 2017버전에서 실행에러 [1]
5157김경훈5/8/201910116Task 만들때 넘겨주는 CancellationToken은 어디서 사용 되는 건가요? [4]
5156rysoo5/8/20198382yield return의 리턴 타입 질문 드립니다. [4]
5155세퉁5/7/201910277관리자 권한으로 실행 시 알림창(?) 없이 바로 실행 시킬 수 있는 방법이 있을까요?? [2]파일 다운로드1
5154Soul...5/4/20197161NamedPipe 질문드립니다. [2]
5153개태5/4/20198126WCF RESTful Service에서 enum을 parameter로 쓰는방법 [2]
5152세퉁5/3/20199249인터넷 시간을 불러와 pc에 적용 시키고 싶습니다. [3]파일 다운로드1
5151이대희5/3/20197354C# 7.3으로 개정판 출간 계획이 있으신가요? [1]
... 16  17  18  19  20  21  22  23  24  25  26  27  [28]  29  30  ...