• 图像分块


      

    (Xor,Yor)会归属于某一块。分块时,每一块的初始地址(左上角坐标)可以确定。

    便捷起见,先确定出块的序号,分两个维度统计。

    块序号:

    block_numx=ceil(Xor+1)/16

    block_numy=ceil(yOr+1)/16

    每块的初始地址为:16(n-1)。边长可以随便定,将16换就可以了。

    代码不对:

        int xo=0,yo=0;
        for (int y=yo;y<ceil(dbZoom*iHeight);y++)
        {    
            for (int x=xo;x<ceil(dbZoom*iWidth);x++)
            {int newWidth=ceil(dbZoom*iWidth);
                for(int i=1;i<=floor((iHeight+0.1)/16)-1;i++)
                {    
                    if((xOr-1>=0+16*(i-1) && xOr<=16*i && yOr-1>=0+16*(i-1) && yOr<=16*i))                
                    {
                        pbTag[y*newWidth+x]=255-20*i;
                    }    
                }            
            }
      }

     代码好像对:

                        int newWidth=ceil(dbZoom*iWidth);
                        int block_numx=ceil((xOr+1.0)/16);
                        int block_numy=ceil((yOr+1.0)/16);
                        double blockSrc[256]={0};
                        int newcount=0;
                        //int k=0,l=0;
                        //分块存储进数组blockSrc[]中
                        for(int k=0;k<16;k++)
                        {
                            for(int l=0;l<16;l++)
                            {
                                int oldcount=(16*block_numy-16+k)*iWidth+16*block_numx-16+l;                
                                blockSrc[newcount]=pbSrc[oldcount];                        
                                newcount++;
                            }                        
                        }//分块存入完毕

    OPENCV,别人的分成4×4块的c++代码:

    int main()
    {
        char* imgPath = "..\img2.jpg";
     
         //[1] 获取图片数据,并转化成灰度图
        Mat img = imread(imgPath);
        if (NULL == img.data)
        {
            printf("read img error!
    ");
            exit(1);
        }
        Mat imgGray;
        cvtColor(img, imgGray, CV_BGR2GRAY);
        // [2] 获取图像相关信息
        int nHeight = imgGray.rows;
        int nWidth = imgGray.cols;
        unsigned char* pData = imgGray.data;
        // [3] 将图像分成4*4块
        int p = 0, q = 0;   //用来标识块索引
        for (int ss = 0; ss < 16; ss++)
        {
            p = ss / 4; //行索引
            q = ss % 4; //列索引
            for (int i = nHeight*p / 4; i < nHeight*(p + 1) / 4; i++)
            {
                for (int j = nWidth*q / 4; j < nWidth*(q + 1) / 4;j++)
                {
                    pData[i*nWidth + j] = ss * 255 / 16;  //每一块显示一种颜色,用于可视化验证
                }
            }    
        }
        //[4] 显示图像
        namedWindow("img");
        imshow("img", imgGray);
        waitKey(0);
        return 0;
    }

    分块读写策略:

    一般而言图像文件在磁盘上是按行存贮的,就是从第一行到最后一行的

    将数据读取/写入到某一块时,首先是从块的起始地址开始,将块的第一行的数据读取/写入。

    但是,块的第二行数据和第一行数据地址不是连续的

    【转载自】

    将图像进行分块(笔记) - CSDN博客 https://blog.csdn.net/a200800170331/article/details/54667188

    略论图像的分块读写策略 - CSDN博客 https://blog.csdn.net/clever101/article/details/2651139

    【其他】

    [python + opencv] 图像的旋转和分块 - CSDN博客 https://blog.csdn.net/Foolishwolf_x/article/details/39343011

  • 相关阅读:
    浅谈缓存管理
    [Architecture Pattern] Database Migration (上)
    knockout.js的学习笔记4
    cenOS5.5安装oracle10g(傻瓜篇)
    SportsStore:管理 — 精通ASP.NET MVC 3
    ASP.NET MVC下的异步Action的定义和执行原理
    基于EF 4.3.1 Code First的领域驱动设计实践案例
    asp.net缓存
    《Pro ASP.NET MVC 3 Framework》部署
    Asp.Net MVC 3.0【Hello World!】
  • 原文地址:https://www.cnblogs.com/wxl845235800/p/9601268.html
Copyright © 2020-2023  润新知