Opencv 이미지 처리 그림 추가 테두리

이론.
이 튜 토리 얼 에 서 는 그림 을 추가 로 채 우 는 방법 두 가 지 를 간략하게 소개 합 니 다.
  • BORDER_CONSTANT:그림
  • 을 고정 값(즉 검은색 또는 0)으로 채 웁 니 다.
  • BORDER_REPLICATE:원본 가장자리 의 줄 이나 열 을 추가 테두리 로 복사 합 니 다.
  • 코드
    프로그램의 실행 절차
  • 에 사진 한 장 을 추가 합 니 다
  • 은 사용자 로 하여 금 그림 에 어떤 충전 을 사용 할 지 선택 하 게 합 니 다.두 가지 선택 이 있 습 니 다:
  • 1.상수 값 테두리:전체 테두리 에 상수 값 을 채 웁 니 다.이 값 은 0.5 초 마다 무 작위 로 업 데 이 트 됩 니 다.
    2.테두리 복사:원본 그림 가장자리 의 픽 셀 값 에서 테 두 리 를 복사 합 니 다.
  • 사용자 가'ESC'를 누 르 면 프로그램 이 끝 납 니 다.
  • 원본 코드
    
     #include "opencv2/imgproc/imgproc.hpp"
    #include "opencv2/imgcodecs.hpp"
    #include "opencv2/highgui/highgui.hpp"
    #include <stdlib.h>
    #include <stdio.h>
    using namespace cv;
    Mat src, dst;
    int top, bottom, left, right;
    int borderType;
    const char* window_name = "copyMakeBorder Demo";
    RNG rng(12345);
    int main( int, char** argv )
    {
     int c;
     src = imread( argv[1] );
     if( src.empty() )
      {
       printf(" No data entered, please enter the path to an image file 
    "); return -1; } printf( "
    \t copyMakeBorder Demo:
    " ); printf( "\t --------------------
    " ); printf( " ** Press 'c' to set the border to a random constant value
    "); printf( " ** Press 'r' to set the border to be replicated
    "); printf( " ** Press 'ESC' to exit the program
    "); namedWindow( window_name, WINDOW_AUTOSIZE ); top = (int) (0.05*src.rows); bottom = (int) (0.05*src.rows); left = (int) (0.05*src.cols); right = (int) (0.05*src.cols); dst = src; imshow( window_name, dst ); for(;;) { c = waitKey(500); if( (char)c == 27 ) { break; } else if( (char)c == 'c' ) { borderType = BORDER_CONSTANT; } else if( (char)c == 'r' ) { borderType = BORDER_REPLICATE; } Scalar value( rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255) ); copyMakeBorder( src, dst, top, bottom, left, right, borderType, value ); imshow( window_name, dst ); } return 0; }
    해명 하 다.
    우선,우 리 는 우리 가 사용 할 변 수 를 설명 합 니 다.

    원본 그림 src 불 러 오기:

    창 을 만 들 었 습 니 다:

    현재 테두리 크기(상단,아래쪽,왼쪽,오른쪽)를 정의 하 는 인 자 를 초기 화 합 니 다.우리 가 그것들 에 게 준 값 은 src 크기 의 5%이다.

    프로그램 이 while 순환 을 시작 합 니 다.사용자 가'c'또는'r'를 누 르 면 borderType 변 수 는 각각 BORDER 를 추출 합 니 다.CONSTANT 또는 BORDERREPLICATE:

    매번 교체 중(0.5 초 후)변수 값 업데이트

    함수 cv::copy MakeBorder 를 호출 하여 해당 하 는 충전 을 적용 합 니 다:
     
    매개 변수 소개:
    src:원본 이미지
    dst:대상 이미지
    top,bottom,left,right:그림 양쪽 테두리 의 길이(픽 셀 단위).우 리 는 그것들 을 그림 의 원본 크기 의 5%로 정의 합 니 다.
    borderType:적용 할 테두리 형식 을 정의 합 니 다.이 예제 에 대해 서 는 상수 나 복사 가 가능 합 니 다.
    value:border Type 이 BORDER 라면CONSTANT,이것 은 테두리 픽 셀 을 채 우 는 데 사용 되 는 값 입 니 다.
    이전에 만 든 그림 에 출력 그림 을 표시 합 니 다.

    효과.

    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기