zoukankan      html  css  js  c++  java
  • 盗版拼接

    昨天想到的这个想法,所以东西的原理都在那个里面。

    但是实现起来,发现竟然十分困难而且之前看到的很多点都忘记了,所以想到要制作一个关于《图像拼接不得不知的点》这样一个博文。因为审核的缘故,发现写随笔更适合有点儿什么东西就写一下,所以,这个里面更多的是每天的一点儿小积累。

    而csdn更像是一个文章,审核也比较严,大牛也感觉起来很多,所以发一些总结性质的东西。

    想了一下,随笔里面应该把csdn的东西都弄进来。这样加上本身博客园的同作者名下的检索功能,就十分犀利了。

    一下盗版拼接,我想说的确在定点摄像头移动的情况下,输入多组图片从而实现的拼接是有可行性的,所谓大繁至简,如果能用简单的方式实现,那么我们并不需要把问题复杂化。

    所以 这种是图片叠加的方式:

    #include <cv.h>
    #include <opencv2/core/core.hpp>  
    #include <opencv2/highgui/highgui.hpp>  
    
    using namespace cv;
    
    void myPicAdd(Mat& src1, Mat& src2, Mat& dest){//并不可用
        //如果不匹配的话,打印提示信息,return -1;
            for (int i = 0; i< src1.rows; i++){
                for (int j = 0; j<dest.cols; j++){
                    if (j<src1.cols)
                        dest.data[j] = src1.data[j];
                    else
                        dest.data[j] = src2.data[j - src1.cols];
                }
            }
    }
    
    using namespace std;
    void myClone(IplImage* src1, IplImage* dest){//图像复制第一版
        for (int i = 0; i< src1->height; i++){
            for (int j = 0; j<dest->widthStep; j++){
                dest->imageData[dest->widthStep *i + j] = src1->imageData[src1->widthStep *i + j];
            }
        }
    }
    
    
    void myPicAdd(IplImage* src1, IplImage* src2, IplImage* dest){//图像叠加
    
        for (int i = 0; i< src1->height; i++){
            for (int j = 0; j<dest->widthStep; j++){
                if (j<src1->widthStep)
                    dest->imageData[dest->widthStep *i + j] = src1->imageData[src1->widthStep *i + j];
                else 
                    dest->imageData[dest->widthStep *i + j] = src2->imageData[src2->widthStep *i + j-src1->widthStep];
            }
        }
    }
    
    int main()
    {
        IplImage* img1 = cvLoadImage("p2.jpg");
        IplImage* img2 = cvLoadImage("p3.jpg");
        IplImage* img3 = cvCreateImage(cvSize(310, 200), 8, 3);
    
        myPicAdd(img2, img1, img3);
        cvShowImage("d",img3);
    
        waitKey(0);
    }
    IplImage* myPicAdd(IplImage* src1, IplImage* src2){//可用然而复杂情况并未考虑
        //先考虑通道数相同的情况。并且两个高度相同的情况。
        
        IplImage * img = cvCreateImage(cvSize(src1->width + src2->width, src1->height), src1->depth, src1->nChannels);
    
        if (src1->nChannels == src2->nChannels){
            for (int i = 0; i< src1->height; i++){
                for (int j = 0; j<img->widthStep; j++){
                    if (j<src1->widthStep)
                        img->imageData[img->widthStep *i + j] = src1->imageData[src1->widthStep *i + j];
                    else
                        img->imageData[img->widthStep *i + j] = src2->imageData[src2->widthStep *i + j - src1->widthStep];
                }
            }
        }
    
        return img;
    }
    IplImage* myPicAdd(IplImage* src1, IplImage* src2){//高度不同问题已经解决
        //先考虑通道数相同的情况。
        int height = src1->height;
        if (src1->height<src2->height){
            height = src2->height;
        }
        
        IplImage * img = cvCreateImage(cvSize(src1->width + src2->width, height), src1->depth, src1->nChannels);
    
        if (src1->nChannels == src2->nChannels){
            for (int i = 0; i<height; i++){
                for (int j = 0; j<img->widthStep; j++){
                    if (j < src1->widthStep)
                    {
                        if (i < src1->height)
                            img->imageData[img->widthStep *i + j] = src1->imageData[src1->widthStep *i + j];
                        else
                            img->imageData[img->widthStep *i + j] = 0;
                    }
                    else{
                        if (i < src2->height)
                            img->imageData[img->widthStep *i + j] = src2->imageData[src2->widthStep *i + j - src1->widthStep];
                        else
                            img->imageData[img->widthStep *i + j] = 0;
                    }
                }
            }
        }
    
        return img;
    }

    今天的问题出现在我把 解决功能和 函数抽象【也可以叫做算法优化放在了一起】导致什么也没做出来的窘境,所以吸取的教训是,要先实现功能,然后在进行优化。优化是在写熟练地基础上,慢慢诞生的感觉。如果功能没有实现,就想优化,一气呵成。这个就不太现实。所以写一个随笔叫做压合细节。

  • 相关阅读:
    立方和等式 考虑方程式:a^3 + b^3 = c^3 + d^3 其中:“^”表示乘方。a、b、c、d是互不相同的小于30的正整数。
    iOS 响应链
    Android驱动使用JNI调用
    [置顶] OGG01091 Unable to open file (error 89, Invalid file system control data detected)
    Unix 系统信号集与编程
    跟我一起玩Win32开发(23):渐变颜色填充
    android webservice 简单应用
    lisk之初发布
    美妙的微机原理2013/4/22
    android 腾讯微博登录小demo
  • 原文地址:https://www.cnblogs.com/letben/p/5462320.html
Copyright © 2011-2022 走看看