gpt4 book ai didi

从图像中复制像素区域

转载 作者:太空宇宙 更新时间:2023-11-04 08:35:49 26 4
gpt4 key购买 nike

获取一个新图像,它是该区域的副本。空白区域返回一个空指针。如果内存分配失败,则返回 null指针。调用者负责释放返回的数组。

该区域包括来自 [left, right-1] 的所有列包括的,以及来自 [top, bottom-1] 的所有行包容性。

在任何情况下,您都可以假设 left <= righttop <= bottom :不需要对此进行测试。

该区域的面积是(right-left) * (bottom-top)像素,其中暗示如果 left == righttop == bottom ,该地区没有区域并定义为“空”。每个函数注意如何处理空白区域。

此解决方案在终端中引发了一个称为“内存损坏”的错误,它指向我的 malloc 函数调用,后跟一个非常奇怪的数字,类似于 0x00001dec880。 ,每次编译都不一样。我不确定这是为什么,我们将不胜感激

uint8_t* region_copy( const uint8_t array[], unsigned int cols, unsigned int rows, 
unsigned int left, unsigned int top, unsigned int right, unsigned int bottom ) {

unsigned int corner1 = left + (top*cols);
unsigned int corner2 = right + (bottom*cols);
unsigned int newsize = (right - left) * (bottom - top);

if(left==right || top == bottom ) {
return NULL;
}

uint8_t* newimg = malloc(newsize * sizeof(uint8_t));

if(newimg == NULL){
return NULL;
}

memset(newimg, 0, newsize);

for(int i = corner1; i < corner2; i++) {
newimg[i] = array[i];
}

return newimg;
}

最佳答案

这个

for(int i = corner1; i < corner2; i++) {
newimg[i] = array[i]; }

copys from array[i],这是你想要的,但它也复制 to newimg在同一位置;就好像 newimgarray 一样大。您需要从第 0 个索引开始复制到 newimg:

for(int i = corner1; i < corner2; i++) {
newimg[i-corner1] = array[i]; }

或者更清晰的操作

for(int i = 0; i< corner2 - corner1; i++) {
newimg[i] = array[corner1 + i]; }

它“更清晰”,因为很明显您复制了 corner2 - corner1 元素,从 corner1 开始。

但这不是唯一的错误!我只会在这里概述它,因为它需要认真重写。

您复制“行 * 列”连续,即从左上角开始并继续到右下角:

..........
..********
**********
******....
..........

但您必须独立复制每一列(或行):

..........
..****....
..****....
..****....
..........

关于从图像中复制像素区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26245580/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com