用opencv放大图像像素

时间:2013-10-13 06:30:50

标签: c++ image opencv image-processing

int main(int argc, char** argv){
cv::Mat gray;
cv::Mat resize;
cv::Mat big;
cv::cvtColor(src, gray, CV_BGR2GRAY);
cv::resize(gray, resize, cv::Size(src.rows/2, src.cols/2));
cv::resize(resize, big, cv::Size(src.rows, src.cols));
cv::Mat clone(resize.rows, resize.cols, CV_8U);

for(int y=0;y<resize.rows;y++){
       for(int x=0;x<resize.cols;x++){
           clone.at<uchar>(y,x) = resize.at<uchar>(y,x);

                               }
                                 }
            cv::imshow("clone", clone);

我写了我的代码,我有2个问题 1)如何将1个像素放大为4个像素?并告诉他们。 2)如何将图像的每个像素放大为4倍乘以图像的每个像素? (不使用插值)

修改

enter image description here

从我的图像

我想将1像素放大到4像素。 然后所有像素图像必须放大到更大的图像。

2 个答案:

答案 0 :(得分:5)

您需要使用最近邻居“插值”:cv::INTER_NEAREST(或CV_INTER_NN)与cv::resize()

cv::resize(gray, enlarged, cv::Size(gray.cols*2, gray.rows*2), cv::INTER_NEAREST);

最近邻大小调整方案实际上并不是插值。它只选择原始中最接近的像素。当每个像素放大2倍时,将重复4次,如图所示。

答案 1 :(得分:0)

Adi Shavit的答案在技术上正确:您必须使用最近邻插值来完成任务。

然而,不是像素变大,而是图像有更多像素。像素的大小是固定的(现在恰好是不确定的):它真的只是用于显示图像的屏幕的照片。当您在屏幕上显示图像时,Yo会感觉感觉像素会变大,因为最近邻插值只会复制原始像素。

几年前,您可以对像素大小(通常为1/72英寸)进行假设,但视网膜屏幕确实会在这里移动线条。此外,一些面向任务的栅格图像格式(如Geotiff)允许将像素的物理尺寸(即其在地面上的足迹)嵌入图像文件中作为元数据。