【影象處理知識複習】10影象縮放到任意大小 C++實現
阿新 • • 發佈:2019-02-14
演算法類似於前面講的點選開啟連結,不同的是,這個給定的是縮放後的影象大小,前面演算法給定的縮放比例。
條件:給出影象,和要縮放到的大小。
效果如下:
C++程式碼實現如下:
#include <opencv2/opencv.hpp> using namespace cv; Mat my_resize(const Mat &, int, int); int main() { Mat img = imread("D:/Code/Image/classic.jpg", 0); imshow("原圖", img); Mat new_img = my_resize(img, 200, 100); // (width, height),(col, row) imshow("縮放後效果", new_img); waitKey(0); return 0; } Mat my_resize(const Mat &img, int width, int height) { // 1, 定義縮放後的影象大小,行列縮放比例 Mat output = Mat::zeros(Size(width, height), CV_8UC1); float width_scale = (float)img.cols / width; // 列縮放比例,相對於演算法前面講的k1 float height_scale = (float)img.rows / height; // 行縮放比例,即k2 // 2, 取樣 for (int i = 0; i < height; i++) // 注意i,j的範圍, i < height * img.rows / height; { for (int j = 0; j < width; j++) { output.at<uchar>(i, j) = img.at<uchar>(round(i * height_scale), round(j * width_scale)); } } return output; }