簡體   English   中英

使用opencv放大圖像像素

[英]Enlarge image pixels with opencv

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乘以圖像的每個像素? (不使用插值)

編輯

在此處輸入圖片說明

從我的圖像中,我想將1像素放大到4像素。 然后,所有像素圖像必須放大為更大的圖像。

您需要使用最近鄰“插值”: 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次,如圖形中一樣。

從技術上來說, Adi Shavit的回答是正確的 :您必須對任務使用最近鄰插值

但是,發生的不是像素變大,而是圖像具有更多像素。 像素的大小是固定的(如今正好是不確定的):它實際上只是用於顯示圖像的屏幕的一個照相場地。 當您在屏幕上顯示圖像時,Yo會有像素變大的感覺 ,因為最近鄰居插值只是復制原始像素。

幾年前,您可能已經對像素大小(通常是1/72英寸)進行了假設,但是視網膜屏幕確實在這里移動了線條。 此外,某些面向任務的柵格圖像格式(例如Geotiff)允許將像素的物理尺寸(即其在地面上的覆蓋區)作為元數據嵌入圖像文件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM