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

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

... 91  92  93  94  [95]  96  97 
NoWriterDateCnt.TitleFile(s)
78임은선1/26/200513562        답변글 [답변]: [답변]: 질문이 있는데요....
72최정희1/19/200513062또 접니다.
73정성태1/19/200512805    답변글 [답변]: 또 접니다. [2]
74최정희1/19/200512208        답변글 [답변]: [답변]: 당연히 도움이 되지요.
75정성태1/19/200512716            답변글 [답변]: [답변]: [답변]: 당연히 도움이 되지요.
69최정희10/13/200412209저 기억하실런지? 그때 두리로IE툴바 만들어 주셨죠.
62엄길웅10/1/200413338매번 물어보기만 하는군요..
63정성태10/2/200413107    답변글 [답변]: 매번 물어보기만 하는군요..
64keal...10/5/200414800        답변글 [답변]: [답변]: 매번 물어보기만 하는군요..
65정성태10/6/200414597            답변글 [답변]: [답변]: [답변]: 매번 물어보기만 하는군요..
68keal...10/11/200412359                답변글 [답변]: [답변]: [답변]: [답변]: 매번 물어보기만 하는군요..
71정성태10/31/200412420                    답변글 [답변]: [답변]: [답변]: [답변]: [답변]: 매번 물어보기만 하는군요..
58엄길웅9/30/200412558안녕하세요.. 추석은 잘 보내셨는지요?
59정성태9/30/200412638    답변글 [답변]: 안녕하세요.. 추석은 잘 보내셨는지요?
60엄길웅10/1/200412526        답변글 [답변]: [답변]: 안녕하세요.. 추석은 잘 보내셨는지요?
56엄길웅9/23/200412887ATL을 이용해서 함수를 하나 만들었습니다.
57정성태9/23/200413882    답변글 [답변]: ATL을 이용해서 함수를 하나 만들었습니다.
61엄길웅10/1/200412569        답변글 [답변]: [답변]: ATL을 이용해서 함수를 하나 만들었습니다.
54차광석8/26/200412731잘 지내시죠?
55정성태8/27/200411815    답변글 [답변]: 잘 지내시죠?
52김명원8/3/200412674질문이요..
53정성태8/19/200412538    답변글 [답변]: 질문이요..
50김상표7/5/200412356질문요...
51정성태7/6/200412244    답변글 [답변]: 질문요...
45송야5/29/200412393웹페이지 자동로그인..
46정성태5/31/200413299    답변글 [답변]: 웹페이지 자동로그인..
... 91  92  93  94  [95]  96  97