코드:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <opencv2/opencv.hpp>
 
using namespace std;
using namespace cv;
 
int main() {
    vector<int> params_jpg, params_png;
    params_jpg.push_back(IMWRITE_JPEG_QUALITY);          //JPG로 화질 설정
    params_jpg.push_back(95);
    params_png.push_back(IMWRITE_PNG_COMPRESSION);       //PNG 압축레벨 저장
    params_png.push_back(3);
 
    Mat image = imread("puppy.bmp");
    if (image.empty()) {
        cout << "Image unloaded" << endl;
        return 0;
    }
 
    imwrite("output.jpg", image, params_jpg); //puppy.bmp->output.jpg
    Mat image_1 = imread("output.jpg");
    if (image_1.empty()) {
        cout << "Image unloaded" << endl;
        return 0;
    }
 
    imwrite("output2.png", image, params_png); //puppy.bmp->output2.png
    Mat image_2 = imread("output2.png");
    if (image_2.empty()) {
        cout << "Image unloaded" << endl;
        return 0;
    }
 
    imshow("original image", image);
    imshow("output image", image_1);
    imshow("output image2", image_2);
 
    waitKey(0);
 
 
 
}
 
cs

실행결과:

 

설명:

    vector<int> params_jpg, params_png;

    params_jpg.push_back(IMWRITE_JPEG_QUALITY);          //JPG로 화질 설정

    params_jpg.push_back(95);

    params_png.push_back(IMWRITE_PNG_COMPRESSION);       //PNG 압축레벨 저장

    params_png.push_back(3);

imwrite에 매개변수로 벡터를 넣기 위해 벡터를 만드는 과정.

이저 버전에서는 

imwrite("output.jpg", image, IMWRITE_JPEG_QUALITY, 95)

이런식으로 코드를 짜도 실행이 됐었지만 현재 최신 버전에서는 에러로 뜬다. 

그래서 위에 코드처럼 벡터를 따로 만들어서 벡터값을 매개변수로 넣어야함...

 

    Mat image = imread("puppy.bmp");

    if (image.empty()) {

        cout << "Image unloaded" << endl;

        return 0;

    }

imread 이미지를 가져오는 코드

 

    imwrite("output.jpg", image, params_jpg); //puppy.bmp->output.jpg

    Mat image_1 = imread("output.jpg");

    if (image_1.empty()) {

        cout << "Image unloaded" << endl;

        return 0;

    }

원본 이미지를 jpg로 압축하여 저장하고 다시 불러와서 image_1이라는 변수에 저장.

 

    imwrite("output2.png", image, params_png); //puppy.bmp->output2.png

    Mat image_2 = imread("output2.png");

    if (image_2.empty()) {

        cout << "Image unloaded" << endl;

        return 0;

    }

마찬가지로 png로 압축한 뒤 불러오기.

 

    imshow("original image", image);

    imshow("output image", image_1);

    imshow("output image2", image_2);

이미지 보여주기.

 

'C,C++ > Opencv, c++' 카테고리의 다른 글

Opencv, c++, threshold()  (0) 2019.10.04
Opencv, c++, cvtColor(), split(), merge()  (0) 2019.10.04
Opencv, c++, video 출력  (0) 2019.09.22
Opencv, c++, Rectangle 출력  (0) 2019.09.22

+ Recent posts