OpenCV의 Sobel 연산을 사용하여 이미지 기울기 방향 계산

C 덕

OpenCV의 Sobel 방법의 결과를 사용하여 이미지 그라데이션 방향을 결정하려고합니다.

나는 이것이 매우 간단한 작업이어야한다는 것을 이해하고, 나는 이론을 이해한다고 생각하지만 이것을 구현하는 것이 생각보다 더 어려웠습니다.

그라디언트 방향은 0-360도 사이가 될 것으로 예상하지만 내 코드는 모든 그라디언트가 180-270도 사이에 있음을 보여줍니다.

정수 나누기 문제가 포함 된이 코드의 이전 버전을 제출했습니다. 나는 이것을 고쳤지만 제한된 방향 각 문제를 해결하지 못했습니다.

나는 모든 코드를 밟았지만 내가 어디로 잘못 가고 있는지 볼 수 없습니까? 누가 내 실수를 발견 할 수 있습니까?

감사.

void getGradients(IplImage* original, cv::Mat* gradArray)
{
cv::Mat original_Mat(original, true);

// Convert it to gray
cv::cvtColor( original_Mat, original_Mat, CV_RGB2GRAY );
//cv::blur(original_Mat, original_Mat, cv::Size(7,7));

/// Generate grad_x and grad_y
cv::Mat grad_x = cv::Mat::zeros(original->height, original->width, CV_16S); 
cv::Mat grad_y = cv::Mat::zeros(original->height, original->width, CV_16S);

/// Gradient X
cv::Sobel(original_Mat, grad_x, CV_16S, 1, 0, 3);

/// Gradient Y
cv::Sobel(original_Mat, grad_y, CV_16S, 0, 1, 3);

uchar* pixelX = grad_x.data;
uchar* pixelY = grad_y.data;
uchar* grad1 = gradArray[0].data;
uchar* grad2 = gradArray[1].data;
uchar* grad3 = gradArray[2].data;
uchar* grad4 = gradArray[3].data;
uchar* grad5 = gradArray[4].data;
uchar* grad6 = gradArray[5].data;
uchar* grad7 = gradArray[6].data;
uchar* grad8 = gradArray[7].data;
int count = 0;
int min = 999999;
int max = -1;

for(int i = 0; i < grad_x.rows * grad_x.cols; i++) 
{
        double directionRAD = atan2(pixelY[i], pixelX[i]);
        int directionDEG = (int)(180 + directionRAD / M_PI * 180);

        if(directionDEG < min){min = directionDEG;}
        if(directionDEG > max){max = directionDEG;}

        if(directionDEG >= 0 && directionDEG <= 45)         { grad1[i] = 255; count++;}         
        if(directionDEG >= 45 && directionDEG <= 90)        { grad2[i] = 255; count++;}         
        if(directionDEG >= 90 && directionDEG <= 135)       { grad3[i] = 255; count++;}         
        if(directionDEG >= 135 && directionDEG <= 190)      { grad4[i] = 255; count++;}         
        if(directionDEG >= 190 && directionDEG <= 225)      { grad5[i] = 255; count++;}         
        if(directionDEG >= 225 && directionDEG <= 270)      { grad6[i] = 255; count++;}     
        if(directionDEG >= 270 && directionDEG <= 315)      { grad7[i] = 255; count++;}
        if(directionDEG >= 315 && directionDEG <= 360)      { grad8[i] = 255; count++;}

        if(directionDEG < 0 || directionDEG > 360)
        {
            cout<<"Weird gradient direction given in method: getGradients.";
        }

}

}

황소

grad_x그리고 grad_yCV_16SC1 유형의 매트입니다. 즉, 모든 픽셀이 2 바이트를 차지합니다.

그러나 당신은 선언 pixelXpixelY8 비트 바이트에 대한 포인터이다. 따라서 pixelX[1]두 번째 그라디언트가 아닌 첫 번째 그라디언트의 두 번째 바이트입니다.

당신은 필요합니다

short* pixelX = grad_x.ptr<short>(0);
short* pixelY = grad_y.ptr<short>(0);

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

기울기 방향 계산

분류에서Dev

기울기 방향 계산

분류에서Dev

dplyr을 사용하여 데이터 프레임의 기울기 계산

분류에서Dev

로드 된 이미지의 크기를 계산하는 방법

분류에서Dev

카드에서 물방울을 감지하고 양과 크기를 계산합니다. OpenCV C ++

분류에서Dev

OpenCV를 사용하여 이미지의 구조 텐서를 계산하는 방법

분류에서Dev

계산기는 두 개의 연산자 방정식을 처리하지 않습니다.

분류에서Dev

C ++ 및 opencv를 사용하여 매트의 크기와 방향을 계산할 때 오류가 발생합니다.

분류에서Dev

tf.GradientTape ()를 사용하여 Tensorflow에서 한 번에 여러 레이어의 손실 및 계산 기울기를 계산합니다.

분류에서Dev

특이 행렬을 사용하여 연립 방정식을 계산적으로 풀기

분류에서Dev

Java를 사용하여 이미지의 밝기, 대비, 색조 및 채도 수준을 계산합니다.

분류에서Dev

OpenCV Sobel 연산자는 상관 관계를 계산합니까?

분류에서Dev

Powershell을 사용하여 구독에서 모든 Azure Storage 테이블의 크기를 계산하는 방법

분류에서Dev

iOS 이미지 필터에 연결하기 위해 두 UIColor 간의 색조 이동을 계산하는 방법은 무엇입니까?

분류에서Dev

다른 테이블에 영향을주기 위해 다른 테이블의 행을 계산하는 방법

분류에서Dev

TensorFlow에서 Sobel Edge Detection을 계산하는 방법

분류에서Dev

미래 날짜의 연령 (년)을 계산하는 테이블 만들기

분류에서Dev

두 'DateTimes'사이의 '기간'을 계산하는 방법

분류에서Dev

두 날짜 사이의 기간을 계산하는 방법

분류에서Dev

Tensorflow 2.0에서 출력 wrt 입력의 기울기를 계산하는 방법

분류에서Dev

Sobel 연산자에 대한 OpenCV 예기치 않은 출력

분류에서Dev

Sutskever의 기술을 사용하여 역전 파로 미분 계산

분류에서Dev

C ++ 연령 계산기-두 날짜 사이의 시간을 찾기위한 가장 효율적인 방정식

분류에서Dev

원 목록을 제외한 이미지의 분산을 계산하는 방법

분류에서Dev

이 그 직선 해골을 사용하여 다각형의 오프셋 (offset) 연귀 계산하는 방법

분류에서Dev

임의의 정밀도없이 기본 산술 만 사용하여 pi 계산

분류에서Dev

중첩 배열을 사용하여 소인수 또는 기타 연산의 수를 표시하고 계산

분류에서Dev

포인터를 사용하여 이미지의 평균 계산

분류에서Dev

Sin (x) ^ 4의 기울기는 미분에서 계산할 때 동일하지 않습니다.

Related 관련 기사

  1. 1

    기울기 방향 계산

  2. 2

    기울기 방향 계산

  3. 3

    dplyr을 사용하여 데이터 프레임의 기울기 계산

  4. 4

    로드 된 이미지의 크기를 계산하는 방법

  5. 5

    카드에서 물방울을 감지하고 양과 크기를 계산합니다. OpenCV C ++

  6. 6

    OpenCV를 사용하여 이미지의 구조 텐서를 계산하는 방법

  7. 7

    계산기는 두 개의 연산자 방정식을 처리하지 않습니다.

  8. 8

    C ++ 및 opencv를 사용하여 매트의 크기와 방향을 계산할 때 오류가 발생합니다.

  9. 9

    tf.GradientTape ()를 사용하여 Tensorflow에서 한 번에 여러 레이어의 손실 및 계산 기울기를 계산합니다.

  10. 10

    특이 행렬을 사용하여 연립 방정식을 계산적으로 풀기

  11. 11

    Java를 사용하여 이미지의 밝기, 대비, 색조 및 채도 수준을 계산합니다.

  12. 12

    OpenCV Sobel 연산자는 상관 관계를 계산합니까?

  13. 13

    Powershell을 사용하여 구독에서 모든 Azure Storage 테이블의 크기를 계산하는 방법

  14. 14

    iOS 이미지 필터에 연결하기 위해 두 UIColor 간의 색조 이동을 계산하는 방법은 무엇입니까?

  15. 15

    다른 테이블에 영향을주기 위해 다른 테이블의 행을 계산하는 방법

  16. 16

    TensorFlow에서 Sobel Edge Detection을 계산하는 방법

  17. 17

    미래 날짜의 연령 (년)을 계산하는 테이블 만들기

  18. 18

    두 'DateTimes'사이의 '기간'을 계산하는 방법

  19. 19

    두 날짜 사이의 기간을 계산하는 방법

  20. 20

    Tensorflow 2.0에서 출력 wrt 입력의 기울기를 계산하는 방법

  21. 21

    Sobel 연산자에 대한 OpenCV 예기치 않은 출력

  22. 22

    Sutskever의 기술을 사용하여 역전 파로 미분 계산

  23. 23

    C ++ 연령 계산기-두 날짜 사이의 시간을 찾기위한 가장 효율적인 방정식

  24. 24

    원 목록을 제외한 이미지의 분산을 계산하는 방법

  25. 25

    이 그 직선 해골을 사용하여 다각형의 오프셋 (offset) 연귀 계산하는 방법

  26. 26

    임의의 정밀도없이 기본 산술 만 사용하여 pi 계산

  27. 27

    중첩 배열을 사용하여 소인수 또는 기타 연산의 수를 표시하고 계산

  28. 28

    포인터를 사용하여 이미지의 평균 계산

  29. 29

    Sin (x) ^ 4의 기울기는 미분에서 계산할 때 동일하지 않습니다.

뜨겁다태그

보관