opencv_ex16-圖像放大pyrUp、RGB變數Scalar、亂數種子和取亂數RNG、圖像加上邊框(小幅度延伸放大)copyMakeBorder

opencv_ex16-圖像放大pyrUp、RGB變數Scalar、亂數種子和取亂數RNG、圖像加上邊框(小幅度延伸放大)copyMakeBorder

opencv_ex16-圖像放大pyrUp、RGB變數Scalar、亂數種子和取亂數RNG、圖像加上邊框(小幅度延伸放大)copyMakeBorder


GITHUB:https://github.com/jash-git/CPP_opencv249_ex


copyMakeBorder種類有三種:
BORDER_REFLECT_101;//外推像素和影像邊界成鏡像映射
BORDER_REPLICATE;//外推的值和邊緣值相同
BORDER_CONSTANT;//外推的值為常數,常在仿射變換、透視變換中使用。

心得: 亂數種子和取亂數RNG[發現如果只執行一次,那麼數值會固定]

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/ml/ml.hpp>

#include <iostream>
#include <cstdio>

#include <sys/timeb.h>
#if defined(WIN32)
    #define  TIMEB    _timeb
    #define  ftime    _ftime
    typedef __int64 TIME_T;
#else
    #define TIMEB timeb
    typedef long long TIME_T;
#endif

using namespace cv;
using namespace std;
Mat src;//input image
void Pause()
{
    printf("Press Enter key to continue...");
    fgetc(stdin);
}
int main()
{
    Mat input,dst01,dst02,dst03,dst04;
	input = imread("Lena_original.jpg");
	if (!input.data)
    {
		printf("could not load image...\n");
	}
    else
    {
        //放大
        pyrUp(input, src, Size(input.cols*2, input.rows*2));
        imshow("Lena_original", src);

        int top = (int)(0.2*src.rows);
        int bottom = (int)(0.2*src.rows);
        int left = (int)(0.2*src.cols);
        int right = (int)(0.2*src.cols);
        int borderType = BORDER_CONSTANT;//外推的值為常數,常在仿射變換、透視變換中使用。
        RNG rng(54321);
        Scalar color01 = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
        copyMakeBorder(src, dst01, top, bottom, left, right, borderType, color01);
        imshow("Border CONSTANT", dst01);

        borderType = BORDER_DEFAULT;
        Scalar color02 = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
        copyMakeBorder(src, dst02, top, bottom, left, right, borderType, color02);
        imshow("Border DEFAULT", dst02);

        borderType = BORDER_REPLICATE;//外推的值和邊緣值相同
        Scalar color03 = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
        copyMakeBorder(src, dst03, top, bottom, left, right, borderType, color03);
        imshow("Border REPLICATE", dst03);

        borderType = BORDER_REFLECT_101;//外推像素和影像邊界成鏡像映射
        Scalar color04 = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
        copyMakeBorder(src, dst04, top, bottom, left, right, borderType, color04);
        imshow("Border BORDER_REFLECT_101", dst04);


    }
    waitKey(0);
    Pause();
    return 0;
}

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *