Microsoft MVP성태의 닷넷 이야기
안녕하세요. 초보개발자입니다. [링크 복사], [링크+제목 복사]
조회: 1817
글쓴 사람
게스트
홈페이지
첨부 파일
안녕하세요. 왕초보 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)
5072엔벌잉10/24/20182446C# textbox, button질문입니다! [4]파일 다운로드1
5071엔벌잉10/23/20182452C#윈도우폼 질문입니다!! [2]
5070진우10/17/20181933Visual Studio 서비스팩과 업데이트 차이 문의 [2]
5069감자10/12/20182244빌드 구성을 재설정하는 방법이 있을까요? [1]파일 다운로드1
5068누오10/10/20181944ASP Core 2.0 에서 dll안에 있는 뷰 읽어들이는 방법? [1]
5067김정민10/5/20181939다른 윈도우가 깨지는 현상을 막을 수 있을까요 [3]
5066로니브10/4/20182298ASP.NET MVC에서 View 파일 숨기는법? 보안처리 하는법? 관련 질문.. [1]
5065키모10/1/20181872문자 질문입니다. [3]
5064로니브10/1/20182318클래스 라이브러리에서 .cshtml파일을 추가하는 방법은 없나요? [3]
5063진우9/28/20181949ADO.net 과 Entity Framework 차이 문의 [2]
5062테스트9/27/20181749C# import file 의 구조체 배열 선언 및 호출에 대해 문의. [3]
5061안녕하세요9/13/20182175c# 프로그래밍 관련 문의 [1]
5060임민재9/8/20182001c# install 파일 생성 시 문제가 발생하였습니다 [1]파일 다운로드1
50599/7/20181811Winform TextBox 포커스 유지하는 방법 질문 [파일첨부] [1]파일 다운로드1
50589/5/20183215Winform TextBox 포커스 유지하는 방법 질문 [3]
5056박종윤8/30/20183053c# dll을 C++에서 사용 시 event 호출 [4]파일 다운로드1
5055초보자8/29/20182456asp.net 에서 다른 서버의 iis를 stop하는 batch file을 실행시키는데 동작하지 않습니다. [5]
5054사도신8/29/20182035[wpf] textbox insert overite 모드시에 [4]파일 다운로드1
5053엿장수8/26/20181873directshow filter 에서의 IMediaSample 의 시간에대한질문입니다 [1]
5052오명현8/26/20182382Tcp소켓 실습 Exeption 도와주세요! [4]파일 다운로드1
5049오명현8/23/20181998책 477페이지 내용 중 이해가 안가는 부분이 있어 질문드립니다. [1]
5048오명현8/23/20181858포트 관련 질문 하나더 있습니다. [1]
5047오명현8/22/20182459포트가 없을 경우를 가정한 내용에 대해 질문이 있습니다. 책468p. [1]
5046엿장수8/22/20182139다이렉트쇼 필터 추가하는데 [2]
5045임도진8/22/20182764c# opencv dll파일 로드 질문 [3]파일 다운로드1
5044엿장수8/20/20182014graphedit 에 등록되어있는 필터를 가져와서 사용하는방법을 알고싶습니다 [2]
1  2  3  4  5  6  7  8  9  10  11  12  13  [14]  15  ...