簡體   English   中英

在OpenCV中逐像素整形圖像

[英]Shaping image pixel by pixel in OpenCV

因此,我的想法是,我已經通過一個矩形窗口從圓柱形相機中拍攝了圖像。 我們得到的圖像是矩形圖片,盡管它必須是圓形的。 我正在使用OpenCV將圖像從一個給定的矩形圖片逐像素移動到一個圓圈。 問題是像素分布取決於半徑而不均勻。 您建議采用哪種算法使分配更加均勻? 這是代碼:

int main( int argc, char** argv ) {


Mat src = imread( "srcImg.jpg", 1 );
Mat dst = imread( "dstImg.jpg", 1 );

int srcH = src.rows; int srcW = src.cols;
int dstH = dst.rows; int dstW = src.cols;

//convert chamber radius to pixels
double alpha, alpha_double, alpha_triple;
int r = 1500;
double k = 210 / (500 * PI);
int l = 1;
//take pixels from source and arrange them into circles

    for (int i = srcH - 1; i > 0; i--) {
        for (int j = 1; j <= srcW ; j++) {
            alpha = (double) (2 * PI * (r * k + i)) / j;
            alpha_double = (double) (2 * PI * ((r + 15) * k + i)) / j;
            alpha_triple = alpha_double = (double) (2 * PI * ((r + 30) * k + i)) / j;

            int x_new = abs((int) (dstW / 2 - (r * k + i) * cos(alpha)) - 200);
            int y_new = abs((int) (dstH / 2 - (3.5*(r * k + i)  * sin(alpha))) + 1000);

            int x_new_double = abs((int) (dstW / 2 - (r * k + i) * cos(alpha_double)) - 200);
            int y_new_double = abs((int) (dstH / 2 - (3.5*(r * k + i)  * sin(alpha_double))) + 1000);

            int x_new_triple = abs((int) (dstW / 2 - (r * k + i) * cos(alpha_triple)) - 200);
            int y_new_triple = abs((int) (dstH / 2 - (3.5*(r * k + i)  * sin(alpha_triple))) + 1000);

            dst.at<uchar>(x_new, y_new) = src.at<uchar>(srcH - i, srcW - j);
            dst.at<uchar>(x_new_double, y_new_double) = src.at<uchar>(srcH - i, srcW - j);
            dst.at<uchar>(x_new_triple, y_new_triple) = src.at<uchar>(srcH - i, srcW - j);
        }
    }

//make dst image grey and show all images
Mat dstGray;
cvtColor(dst, dstGray, CV_RGB2GRAY);
imshow("Source", src);
imshow("Result", dstGray);

waitKey();
return 0;

結果

這幾乎不是一個完整的答案,但是我會嘗試某種投影映射,而不是手動訪問每個像素。 必須有一個openCV方式來創建目標形狀,然后說:“拍攝我的原始圖像,使其適合目標形狀”

正如您在此處看到的那樣,這對於矩形而言是微不足道的,但是中間的孔使它變得更難。

暫無
暫無

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

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