문제

캡처 (웹캠)에서 찍은 이미지를 변환하려고 노력하고 OpenCV로 처리를 수행하지만 어려운 시간을 보내고 있습니다.

이미지를 그레이 스케일로 변환하려고 할 때 프로그램이 충돌합니다. (Python.exe는 작동을 중지했습니다)

내 코드의 주요 스 니펫은 다음과 같습니다.

newFrameImageGS = cv.CreateImage ((320, 240), cv.IPL_DEPTH_8U, 1)

for i in range(0,5):
    newFrameImage = cv.QueryFrame(ps3eye)
    cv.CvtColor(newFrameImage,newFrameImageGS,cv.CV_BGR2GRAY)
    golfSwing.append(newFrameImageGS)

CVConvertsCale을 사용하려고하면 어설 션 오류가 발생합니다.

src.size() == dst.size() && src.channels() == dst.channels()

말이되지만 웹 캠의 입력 이미지를 cvupdatemotionhistory () 및 cvcalcopticalflowlk ()와 같은 함수에서 사용할 수있는 이미지로 변환하는 방법에 대해 혼란스러워합니다.

어떤 아이디어? 감사.

업데이트:

이미지를 그레이 스케일로 수동으로 변환했습니다.

for row in range(0,newFrameImage.height):
            for col in range(0,newFrameImage.width):
                newFrameImageGS[row,col] = (newFrameImage8U[row,col][0] * 0.114 + # B
                                            newFrameImage8U[row,col][1] * 0.587 + # G
                                            newFrameImage8U[row,col][2] * 0.299)  # R

그러나 이것은 꽤 오랜 시간이 걸립니다. 그리고 나는 여전히 cvcvtcolor가 프로그램이 충돌하는 이유를 알 수 없습니다.

도움이 되었습니까?

해결책

어떤 이유로, cvtcolor는 이미지가 8 비트가 될 때 프로그램이 충돌시켰다. 32 비트로 변환하면 프로그램이 더 이상 충돌하지 않으며 모든 것이 잘 작동하는 것처럼 보였습니다. 나는 이것이 왜 그런지 모르겠지만 적어도 지금은 작동합니다.

newFrameImage = cv.QueryFrame(ps3eye)

newFrameImage32F = cv.CreateImage((320, 240), cv.IPL_DEPTH_32F, 3)
cv.ConvertScale(newFrameImage,newFrameImage32F)

newFrameImageGS_32F = cv.CreateImage ((320,240), cv.IPL_DEPTH_32F, 1)
cv.CvtColor(newFrameImage32F,newFrameImageGS_32F,cv.CV_RGB2GRAY)

newFrameImageGS = cv.CreateImage ((320,240), cv.IPL_DEPTH_8U, 1)
cv.ConvertScale(newFrameImageGS_32F,newFrameImageGS)

다른 팁

여기에는 일반적인 실수가 있습니다.

당신은에서 단일 이미지를 만들고 있습니다 newFrameImageGS 변하기 쉬운 ~ 전에 루프는 루프에 내용물을 덮어 쓰고 목록에 추가됩니다. 결과는 당신이 기대할 수있는 것이 아닙니다. 목록에는 끝에 동일한 이미지 인스턴스에 대한 5 개의 참조가 포함됩니다. 객체 참조 만 목록에 추가되므로 이런 식으로 만든 객체의 사본은 없습니다. 이 이미지에는 마지막 프레임이 포함되어 있으므로 결과적으로 5 개의 프레임을 얻을 수 있습니다. 확실하지 않은 경우 Python 튜토리얼을 검토하십시오. 위의 코드의 첫 번째 줄을 For Loop의 본문으로 이동하여이를 해결할 수 있습니다.

위의 것을 고치면 또 다른 가능성이 도움이되지 않습니다.

그만큼 CvtColor 기능은 다른 수의 채널로 변환 할 수 있기 때문에 그레이 스케일로 변환하기에 올바른 것으로 보입니다.

에 따르면 이 설명서 그만큼 CvtColor 함수에는 소스와 동일한 데이터 유형의 대상 이미지가 필요합니다. 두 번 확인하십시오 newFrameImage a IPL_DEPTH_8U 영상.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top