一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

图像像素的拷贝方法、装置、存储介质及电子装置与流程

2022-08-13 16:37:37 来源:中国专利 TAG:


1.本发明实施例涉及图像处理领域,具体而言,涉及一种图像像素的拷贝方法、装置、存储介质及电子装置。


背景技术:

2.在相关领域中,图像数据拷贝是一种常用的图像数据处理手段,通常情况下,在linux设备中,cpu资源有限,且会对应用程序的耗时有很高的要求。使用cpu进行图像数据拷贝是常用的一种方法,尤其是大图像和频繁拷贝操作,必然会消耗大量的cpu资源、带宽资源和增加应用程序的耗时。
3.现有技术中,通常采用设备硬件单元进行处理,这样不仅可以节省大量的cpu和带宽资源,也可以提高应用程序的整体性能。支持opencl的gpu硬件资源是linux设备中常用的加速单元,常常会被用来优化加速操作。但是使用opencl进行数据拷贝过程中,由于其对行读取的特性(每次读取固定的像素点数),当从原图像中读取到要求区域边界的时候,会读取到要求区域以外的几个像素点,这样将读取到的图像数据写入到目的图像中,会出现不需要的区域以外的无效数据,导致图像数据拷贝的准确性较低。因此需要一种方法来实现目的图像中的数据全部是要求区域内的有效数据。这样不仅能够借助gpu硬件单元加速也能够避免无效数据的写入。
4.针对相关技术中存在的上述问题,目前尚未提出有效的解决方案。


技术实现要素:

5.本发明实施例提供了一种图像像素的拷贝方法、装置、存储介质及电子装置,以至少解决相关技术中图像数据拷贝的准确性较低的问题。
6.根据本发明的一个实施例,提供了一种图像像素的拷贝方法,包括:确定拷贝原图的第一拷贝区域,以及拷贝目的图的第二拷贝区域;获取当前次拷贝操作中执行读取操作时所读取的所述第一拷贝区域中的第一起始偏移点,以及在所述第二拷贝区域执行写入操作时的第二起始偏移点,其中,所述第二起始偏移点位于所述第二拷贝区域内;从所述第一起始偏移点开始,读取预设数量的第一像素值,并在所述拷贝目的图中以所述第二起始偏移点为起点写入所述第一像素值;在确定所述第一像素值中包括写入所述第二拷贝区域之外的第二像素值的情况下,将所述第二像素值所对应的像素点的原始像素值对应覆盖在所述第二像素值所对应的像素点上,其中,所述第二像素值所对应的像素点为在所述拷贝目的图中写入所述第二像素值的像素点。
7.可选地,所述原始像素值通过如下方式确定:在所述拷贝目的图中,以所述第二起始偏移点为起点写入所述预设数量的所述第一像素值的情况下,预先确定所述预设数量的所述第一像素值对应的像素点中位于所述第二拷贝区域右边框上的边缘像素点的坐标;基于所述边缘像素点的坐标,在所述拷贝目的图中获取并存储以所述边缘像素点开始向右选取的所述预设数量的像素点的原始像素值,其中,所述预设数量的像素点的原始像素值中
包括所述第二像素值对应像素点的原始像素值。
8.可选地,在所述拷贝目的图中,以所述第二起始偏移点为起点写入所述第一像素值的情况下,预先确定所述预设数量的第一像素值对应的像素点中位于所述第二拷贝区域右边框上的边缘像素点的坐标,包括:确定所述第二拷贝区域的区域宽值;将位于所述第二拷贝区域中的起始像素的坐标点的横坐标值,与所述区域宽值之和,确定为所述边缘像素点的横坐标;将所述第二起始偏移点的纵坐标值,确定为所述边缘像素点的纵坐标。
9.可选地,确定所述第一像素值中包括写入所述第二拷贝区域之外的第二像素值的情况下,将所述第二像素值所对应的像素点的原始像素值对应覆盖在所述第二像素值所对应的像素点上,包括:在所述拷贝目的图中确定以所述边缘像素点开始向右选取的所述预设数量的像素点,其中,所述预设数量的像素点中包括所述第二像素值对应的像素点;将所述预设数量的像素点的原始像素值,对应覆盖在所述预设数量的像素点上。
10.可选地,获取当前次拷贝操作中执行读取操作时所读取的所述第一拷贝区域中的第一起始偏移点,以及在所述第二拷贝区域执行写入操作时的第二起始偏移点,所述方法包括:获取工作项的起始偏移坐标值,其中,所述工作项用于将所述拷贝原图中的像素点拷贝到所述拷贝目的图;基于所述起始偏移坐标值与所述第一拷贝区域的起始像素点的坐标值之和,确定所述第一起始偏移点;基于所述起始偏移坐标值与所述第二拷贝区域的起始像素点的坐标值之和,确定所述第二起始偏移点。
11.可选地,确定所述第二拷贝区域的区域宽值,包括:在所述第一拷贝区域宽值小于所述第二拷贝区域的原始宽值的情况下,将所述第二拷贝区域的原始宽值更新为所述第一拷贝区域宽值;在所述第二拷贝区域宽值小于所述第一拷贝区域宽值的情况下,保持所述第二拷贝区域宽值不变。
12.可选地,所述方法还包括:在所述拷贝目的图中以所述第二起始偏移点为起点写入所述预设数量的所述第一像素值的情况下,确定所述第一像素值中包括的最后一个写入所述拷贝目的图中的像素值对应的第一目标像素点;在所述第一目标像素点的横坐标大于第二目标像素点的横坐标的情况下,确定所述第一像素值中包括的写入所述第二拷贝区域之外的第二像素值,其中,所述第二目标像素点为位于所述第二拷贝区域的右边框上的像素点。
13.根据本发明的另一个实施例,提供了一种图像像素的拷贝装置,包括:第一确定模块,用于确定拷贝原图的第一拷贝区域,以及拷贝目的图的第二拷贝区域;获取模块,用于获取当前次拷贝操作中执行读取操作时所读取的所述第一拷贝区域中的第一起始偏移点,以及在所述第二拷贝区域执行写入操作时的第二起始偏移点,其中,所述第二起始偏移点位于所述第二拷贝区域内;写入模块,用于从所述第一起始偏移点开始,读取预设数量的第一像素值,并在所述拷贝目的图中以所述第二起始偏移点为起点写入所述第一像素值;覆盖模块,用于在确定所述第一像素值中包括写入所述第二拷贝区域之外的第二像素值的情况下,将所述第二像素值所对应的像素点的原始像素值对应覆盖在所述第二像素值所对应的像素点上,其中,所述第二像素值所对应的像素点为在所述拷贝目的图中写入所述第二像素值的像素点。
14.根据本发明的又一个实施例,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被处理器执行时实现上述任一项
中所述的方法的步骤。
15.根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
16.通过本发明,通过确定在拷贝原图中需要拷贝的第一拷贝区域,以及拷贝目的图的第二拷贝区域,获取当前次拷贝操作中执行读取操作时所读取的第一拷贝区域中的第一起始偏移点,以及在第二拷贝区域中的第二起始偏移点,以第一起始偏移点为起点读取预设数量的第一像素值,并在拷贝目的图中以第二起始偏移点为起点写入第一像素值,在写入的第一像素值中包括写入第二拷贝区域之外的第二像素值的情况下,将拷贝目的图中第二像素值所对应的像素点的原始像素值对应覆盖在第二像素值所对应的像素点上,进而可以将位于要求的第二拷贝区域之外的无效数据去除,仅保留位于第二拷贝区域中的有效数据,因此,可以解决现有技术中的图像数据拷贝的准确性较低的问题,达到提高图像数据拷贝的准确性的效果。
附图说明
17.图1是本发明实施例的一种图像像素的拷贝方法的移动终端的硬件结构框图;
18.图2是根据本发明实施例的图像像素的拷贝的流程图;
19.图3是根据本发明实施例的可选地基于opencl图像拷贝边缘数据处理方法流程图;
20.图4是根据本发明实施例的图像像素的拷贝装置的结构框图。
具体实施方式
21.下文中将参考附图并结合实施例来详细说明本发明的实施例。
22.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
23.本技术实施例中所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在移动终端上为例,图1是本发明实施例的一种图像像素的拷贝方法的移动终端的硬件结构框图。如图1所示,移动终端可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置)和用于存储数据的存储器104,其中,上述移动终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述移动终端的结构造成限定。例如,移动终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
24.存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本发明实施例中的图像像素的拷贝方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至移动终端。上述网络的实例包括
但不限于互联网、企业内部网、局域网、移动通信网及其组合。
25.传输设备106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括移动终端的通信供应商提供的无线网络。在一个实例中,传输设备106包括一个网络适配器(network interface controller,简称为nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为射频(radio frequency,简称为rf)模块,其用于通过无线方式与互联网进行通讯。
26.在本实施例中提供了一种运行于上述移动终端的图像像素的拷贝方法,图2是根据本发明实施例的图像像素的拷贝的流程图,如图2所示,该流程包括如下步骤:
27.步骤s202,确定拷贝原图的第一拷贝区域,以及拷贝目的图的第二拷贝区域;
28.其中,第一拷贝区域可以是拷贝原图中的任意一个需要拷贝的指定区域,第二拷贝区域可以是拷贝目的图中的任意一个需要拷贝到的指定区域,图像数据拷贝的基本原理是从拷贝原图中的第一拷贝区域中读取一定的像素值,然后写入到拷贝目的图中的第二拷贝区域。
29.步骤s204,获取当前次拷贝操作中执行读取操作时所读取的所述第一拷贝区域中的第一起始偏移点,以及在所述第二拷贝区域执行写入操作时的第二起始偏移点,其中,所述第二起始偏移点位于所述第二拷贝区域内;
30.其中,第一起始偏移点可以是用于读取第一拷贝区域中像素的工作项的起始坐标点,第二起始偏移点可以是用于将像素写入第二拷贝区域的工作项的起始坐标点,写入像素的第二偏移点位于第二拷贝区域之内。
31.步骤s206,从所述第一起始偏移点开始,读取预设数量的第一像素值,并在所述拷贝目的图中以所述第二起始偏移点为起点写入所述第一像素值;
32.其中,预设数量可以表示工作项一次读取一行的像素点个数,预设数量可以是4、8或者是16,此处对预设数量不做限制,假设预设数量是16,则可以在拷贝原图中,以第一起始偏移点为起点读取16个第一像素值,并在拷贝目的图中以第二起始偏移点为起点写入上述16个第一像素值。
33.步骤s208,在确定所述第一像素值中包括写入所述第二拷贝区域之外的第二像素值的情况下,将所述第二像素值所对应的像素点的原始像素值对应覆盖在所述第二像素值所对应的像素点上,其中,所述第二像素值所对应的像素点为在所述拷贝目的图中写入所述第二像素值的像素点。
34.其中,在拷贝目的图中写入16个第一像素值之后,若写入的16个第一像素值中,包括位于第二拷贝区域之外的第二像素值的情况下,比如在16个第一像素值中包括位于第二拷贝区域之内的10个第一像素值,同时也包括位于第二拷贝区域之外的6个第一像素值,此时,将位于第二拷贝区域之外的6个第一像素值确定为第二像素值,并将第二像素值对应的像素点的原始像素值覆盖在第二拷贝区域之外的6个第二像素值对应的像素点中。
35.可选地,上述步骤的执行主体可以是后台处理器,或者其他的具备类似处理能力的设备,还可以是至少集成有图像获取设备以及数据处理设备的机器,其中,图像获取设备可以包括摄像头等图形采集模块,数据处理设备可以包括计算机、手机等终端,但不限于此。
36.通过上述步骤,通过确定在拷贝原图中需要拷贝的第一拷贝区域,以及拷贝目的
图的第二拷贝区域,获取当前次拷贝操作中执行读取操作时所读取的第一拷贝区域中的第一起始偏移点,以及在第二拷贝区域中的第二起始偏移点,以第一起始偏移点为起点读取预设数量的第一像素值,并在拷贝目的图中以第二起始偏移点为起点写入第一像素值,在写入的第一像素值中包括写入第二拷贝区域之外的第二像素值的情况下,将拷贝目的图中第二像素值所对应的像素点的原始像素值对应覆盖在第二像素值所对应的像素点上,进而可以将位于要求的第二拷贝区域之外的无效数据去除,仅保留位于第二拷贝区域中的有效数据,因此,可以解决现有技术中的图像数据拷贝的准确性较低的问题,达到了提高图像数据拷贝的准确性的效果。
37.可选地,所述原始像素值通过如下方式确定:在所述拷贝目的图中,以所述第二起始偏移点为起点写入所述预设数量的所述第一像素值的情况下,预先确定所述预设数量的所述第一像素值对应的像素点中位于所述第二拷贝区域右边框上的边缘像素点的坐标;基于所述边缘像素点的坐标,在所述拷贝目的图中获取并存储以所述边缘像素点开始向右选取的所述预设数量的像素点的原始像素值,其中,所述预设数量的像素点的原始像素值中包括所述第二像素值对应像素点的原始像素值。
38.作为一个可选的实施方式,假设预设数量为16,第二起始偏移点dstpos的坐标为(16,32),在拷贝目的图中,以第二起始偏移点dstpos为起点写入一行16个像素值的情况下,需要预先确定16个像素值对应的16个像素点中,写入第二拷贝区域右边框上的边缘像素点的坐标,假设第二拷贝区域右边框的横坐标为26,则边缘像素点坐标为(26,32),获取并存储在拷贝目的图中以边缘像素点坐标为(26,32)开始向右选取的16个像素点的原始像素值。
39.可选地,在所述拷贝目的图中,以所述第二起始偏移点为起点写入所述第一像素值的情况下,预先确定所述预设数量的第一像素值对应的像素点中位于所述第二拷贝区域右边框上的边缘像素点的坐标,包括:确定所述第二拷贝区域的区域宽值;将位于所述第二拷贝区域中的起始像素的坐标点的横坐标值,与所述区域宽值之和,确定为所述边缘像素点的横坐标;将所述第二起始偏移点的纵坐标值,确定为所述边缘像素点的纵坐标。
40.作为一个可选的实施方式,假设拷贝目的图dstimg中的第二拷贝区域dstrect的拷贝起点(左上角)坐标为(dx0,dy0),终点(右下角)坐标为(dx1,dy1),可以确定第二拷贝区域的区域宽值rw=dx1

dx0 1。假设第一起始偏移点为srcpos,第二起始偏移点dstpos的纵坐标为dstpos.y,当将srcpos位置读取的预设数量的第一像素值,全部写入到dstpos位置时,预设数量的第一像素值后面部分数据将在第二拷贝区域dstrect框右侧的外部,属于无效数据。此时可以计算出该种情况下,dstpos位置向后写入预设数量的第一像素值后,落在dstrect右侧框上的边缘像素点的坐标tmp_dstpos=(dx0 rw,dstpos.y)。
41.可选地,在确定所述第一像素值中包括写入所述第二拷贝区域之外的第二像素值的情况下,将所述第二像素值所对应的像素点的原始像素值对应覆盖在所述第二像素值所对应的像素点上,包括:在所述拷贝目的图中确定以所述边缘像素点开始向右选取的所述预设数量的像素点,其中,所述预设数量的像素点中包括所述第二像素值对应的像素点;将所述预设数量的像素点的原始像素值,对应覆盖在所述预设数量的像素点上。
42.作为一个可选的实施方式,将从拷贝原图的第一起始偏移点srcpos位置读取的预设数量的第一像素值数据src_data,并写入到拷贝目的图的第二起始偏移点dstpos位置,
此时第二拷贝区域dstrect右边框外侧会存在不需要拷贝的第一像素值,将上述位于第二拷贝区域dstrect右边框外侧的第一像素值确定为第二像素值。第二像素值用于表示无效数据,是以边缘像素点的坐标tmp_dstpos为起点向后的一段像素点对应的像素值。假设预设数量为16,第二像素值对应的像素点的数量为6,此时,可以将预先存储的在目的拷贝图的以边缘像素点的坐标tmp_dstpos为起点读取的16个像素点的原始像素值tmp_dst_data对应覆盖到已完成拷贝的16个像素点上,此时覆盖的16个像素点中包括第二像素值对应的6个像素点,完成了对拷贝目的图中无效的拷贝原图数据的覆盖操作,通过使用原始的像素值将第二拷贝区域之外的无效的第二像素值进行覆盖,可以解决现有技术中的图像数据拷贝时,在目的图中存在无效的原图数据导致的拷贝准确性较低的问题。
43.可选地,获取当前次拷贝操作中执行读取操作时所读取的所述第一拷贝区域中的第一起始偏移点,以及在所述第二拷贝区域执行写入操作时的第二起始偏移点,所述方法包括:获取工作项的起始偏移坐标值,其中,所述工作项用于将所述拷贝原图中的像素点拷贝到所述拷贝目的图;基于所述起始偏移坐标值与所述第一拷贝区域的起始像素点的坐标值之和,确定所述第一起始偏移点;基于所述起始偏移坐标值与所述第二拷贝区域的起始像素点的坐标值之和,确定所述第二起始偏移点。
44.作为一个可选的实施方式,opencl的每个工作项工作都会通过get_global_id获取当前工作项的起始偏移地址idx(int2类型的数据),通过起始偏移坐标值idx和第一拷贝区域的起始像素点的坐标值sx0、sy0计算拷贝原图像素读取的第一起始偏移点srcpos(int2类型,两维数组),其中,srcpos=idx (int2)(sx0,sy0)。同时,通过起始偏移坐标值idx和第二拷贝区域的起始像素点的坐标值dx0、dy0计算拷贝目的图像素写入的第二起始偏移点dstpos(int2类型,两维数组),其中,dstpos=idx (int2)(dx0,dy0)。
45.可选地,确定所述第二拷贝区域的区域宽值,包括:在所述第一拷贝区域宽值小于所述第二拷贝区域的原始宽值的情况下,将所述第二拷贝区域的原始宽值更新为所述第一拷贝区域宽值;在所述第二拷贝区域宽值小于所述第一拷贝区域宽值的情况下,保持所述第二拷贝区域宽值不变。
46.作为一个可选的实施方式,假设第一拷贝区域的区域宽值为srw,第二拷贝区域的原始宽值为drw,则需要确保第一拷贝区域srcrect和第二拷贝区域dstrect的区域宽值相等,如果第一拷贝区域srcrect的区域宽值和第二拷贝区域的dstrect区域宽值不对应相等。需要以区域宽值取最小值作为最终的拷贝区域的宽,在第一拷贝区域宽值srw小于第二拷贝区域的原始宽值drw的情况下,将第二拷贝区域的原始宽值drw更新为第一拷贝区域宽值srw;在第二拷贝区域宽值drw小于第一拷贝区域宽值srw的情况下,保持第二拷贝区域宽值不变。
47.可选地,在所述拷贝目的图中以所述第二起始偏移点为起点写入所述预设数量的所述第一像素值的情况下,确定所述第一像素值中包括的最后一个写入所述拷贝目的图中的像素值对应的第一目标像素点;在所述第一目标像素点的横坐标大于第二目标像素点的横坐标的情况下,确定所述第一像素值中包括的写入所述第二拷贝区域之外的第二像素值,其中,所述第二目标像素点为位于所述第二拷贝区域的右边框上的像素点。
48.作为一个可选的实施方式,假设第二起始偏移点为(16,32),预设数量为16,在拷贝目的图中,在以像素点(16,32)为起点,写入16个第一像素值的情况下,将最后一个像素
值对应的像素点确定为第一目标像素点,并在拷贝目的图中确定第一目标像素点的坐标为(31,32),假设位于第二拷贝区域的右边框上的第二目标像素点的坐标为(26,32),则此时第一目标像素点(31,32)的横坐标31大于第二目标像素点的横坐标26,可以确定写入的第一像素值中包括写入所述第二拷贝区域之外的第二像素值,此时可以将第二目标像素点(26,32)至第一目标像素点(31,32)之间的像素点对应的像素值确定为第二像素值。
49.作为一个可选的实施方式,本发明中图像数据拷贝是采用cpu gpu异构的方式,利用gpu强大的数据计算能力,cpu的逻辑调度处理能力,使用opencl并行化语言,充分利用平台硬件资源加速数据拷贝操作。首先根据拷贝原图(srcimg)的原拷贝区域(srcrect),和拷贝目的图(dstimg)的目的拷贝区域(dstrect)得到相应的拷贝区域起点坐标和宽高信息,其中srcrect由四个数据组成,分别是拷贝区域起点(左上角)坐标(sx0,sy0)和终点(右下角)坐标(sx1,sy1),dstrect也是由四个数据组成,分别是拷贝区域起点(左上角)坐标(dx0,dy0)和终点(右下角)坐标(dx1,dy1)。根据坐标信息计算出拷贝区域的宽度rw和高度rh(这里需要说明的是两个拷贝区域的宽度和高度必须一样,坐标的原点为图像的左上角坐标,向右为x轴的正方向,向下为y轴正方向)。假设opencl工作过程中,每个工作项work-item的global id(x,y,z)起始偏移值为idx,idx经过(sx0,sy0)偏移后暂定为srcpos,srcpos是从srcimg的srcrect读取像素值的起始点位置,idx经过(dx0,dy0)偏移后暂定为dstpos,dstpos是dstimg的dstrect写入像素值的起始点位置。
50.假设工作项首先从srcimg的srcpos位置开始固定读取一行16个像素值src_data,然后根据起始点idx、拷贝区域宽度rw和拷贝的像素值个数16之间的关系,判断从srcimg的srcpos位置读取到的16个像素值做何种处理方式。是全部写入到目的图dstimg对应的dstpos位置。还是直接返回,不在dstimg的任何位置写入数据。再或者是需要做边缘特殊处理后再写入到目的图dstimg对应的dstpos位置。然后依次上述操作,直到将拷贝原图srcimg对应的拷贝区域srcrect中的像素全部拷贝到拷贝目的图dstimg对应的拷贝区域dstrect中,拷贝过程中会对srcrect边缘数据做特殊优化处理,确保整个拷贝过程中,不会将srcrect区域以外的数据拷贝到dstimg中。
51.整体设计流程图如图3所示,以上中的变量在图3中和介绍的时候仍使用。以下流程图和介绍中以工作项一次读取一行num个像素为例进行说明,其中的num也可以是4、8、16,vxc_uchar16可以是vxc_uchar4、vxc_uchar8、float4,也可以是其他的数据类型。
52.如图3所示,基于opencl图像拷贝边缘数据处理方法中,从拷贝原图srcimg的srcrect框的某个偏移位置读取一行num个像素值,根据偏移位置idx.x、框宽rw、和数字num之间的关系,判断是否需要对数据做特殊的边缘处理,直到完成全部的拷贝操作。下面就详细介绍图3所示的流程。
53.步骤s301、srcrect、dstrect有效性检查;
54.首先从拷贝原图srcimg获取宽(sw)、高(sh)信息,从拷贝目的图dstimg获取宽(dw)、高(dh)信息。从原拷贝区域srcrect中获取拷贝起点(左上角)坐标(sx0,sy0)和终点(右下角)坐标(sx1,sy1),计算原拷贝框的宽srw(srw=sx1

sx0 1),原拷贝框的高srh(srh=sy1

sy0 1)。从目的拷贝区域dstrect中获取拷贝起点(左上角)坐标(dx0,dy0)和终点(右下角)坐标(dx1,dy1),计算目的拷贝框的宽drw(drw=dx1

dx0 1),目的拷贝框的高drh(drh=dy1

dy0 1)。
55.首先要确保拷贝原图srcimg的拷贝区域srcrect一定要在srcimg的有效范围内。拷贝目的图dstimg的拷贝区域dstrect也一定在dstimg的有效范围内。srcrect和dstrect框的宽高要相等,如果srcrect框的宽高和dstrect框的宽高不对应相等。以宽和高取最小值作为最终的拷贝框的宽和高,并已各自框的左上角坐标保持不变,右下角坐标随框的宽高改变为改变。假设最终的拷贝框宽用rw表示、框高用rh表示。
56.步骤s302、opencl工作项起始坐标有效性检查;
57.每个工作项工作是都会通过get_global_id获取当前工作项的起始地址idx(int2类型的数据)。如果idx.x《0或者idx.y《0,说明坐标区域位于图像区域以外,属于无效的起始地址idx,可直接return,结束掉这一工作项的拷贝任务。
58.步骤s303、确定srcpos、dstpos位置;
59.每一个工作项在运行过程中,通过get_global_id()来获取当前工作项起始偏移值idx(int2类型的数据,两维数组),通过idx和sx0、sy0计算拷贝原图像素读取起始偏移点srcpos(int2类型,两维数组),srcpos=idx (int2)(sx0,sy0);
60.通过idx和dx0、dy0计算拷贝目的图像素写入起始偏移点dstpos(int2类型,两维数组),dstpos=idx (int2)(dx0,dy0)。
61.步骤s304、读取像素值并进行判断是否需要进行边缘数据处理;
62.从拷贝原图srcimg的srcpos位置读取一行num个像素值,并保存在src_data(vxc_uchar16类型的数组)变量中。下面可以根据如下三种情况来判断是否需要对读取的src_data数据进行特殊处理。
63.步骤s3041、idx.x sx0 num≤rw sx0或idx.x num≤rw;
64.这种情况下表示srcpos.x所表示的x坐标位置在srcimg的srcrect的区域内部,并且从srcpos.x坐标开始读取num个像素后的坐标位置srcpos.x num-1依然在srcrect的内部。这样从srcimg的srcpos.x位置读取的num个像素值src_data,全部在srcrect内部且为要求拷贝的有效数据。这种情况下无需对srcpos.x、dstpos.x的x纵坐标进行特殊处理。进入步骤s306。
65.步骤s3042、idx.x sx0≥rw sx0或idx.x≥rw;
66.这种情况下表示srcpos.x所表示的x坐标位置已经在srcimg的srcrect右边框的右侧。这种情况下不需要任何拷贝操作,直接return返回结束掉这次的工作项的拷贝任务。进入步骤s306。
67.步骤s3043、rw sx0《idx.x sx0 num且idx.x sx0《rw sx0,即idx.x sx0《rw sx0《idx.x sx0 num,亦即idx.x《rw《idx.x num,这种情况下表示srcpos.x所表示的x坐标位置在srcimg的srcrect的区域内部,并且从srcpos.x坐标开始读取num个像素后的坐标位置srcpos.x num-1在srcrect右侧框的外部。如果此时从srcimg的srcpos.x位置读取一行num个像素值src_data,那么这num个像素值前面一部分在srcrect框的内部(需要拷贝的有效数据),后面一部分在srcrect右侧框的外部(不需要拷贝的无效数据)。如果此时将src_data的num个像素值直接写入到dstimg的dstpos的坐标位置,就会导致部分无效数据被写入到dstimg图中。如果要解决这种问题,做一些特殊操作来处理这种问题。步骤s305将重点介绍处理方法。
68.步骤s305、边缘数据特殊处理方法;
69.该部分将重点将以步骤s304中步骤s3043的情况为前提条件进行说明处理方法。处理的主要核心思想是图像数据覆盖。
70.步骤s3051、确定dstimg中tmp_dstpos位置;
71.当将srcpos位置读取的num个像素只数据src_data,全部写入到dstpos位置时,src_data后面部分数据将在dstrect框右侧的外部,属于无效数据。此时可以计算出该种情况下,dstpos位置向后写入num个像素点后,落在dstrect右侧框上的点的坐标tmp_dstpos,即tmp_dstpos=(dx0 rw,dstpos.y)。
72.步骤s3052、从tmp_dstpos位置获取tmp_dst_data;
73.从目的拷贝图的tmp_dstp位置读取num个像素值,保存在tmp_dst_data变量中。其中tmp_dst_data中保存的num个像素值全部是dstrect右侧框外边的数据。
74.步骤s3053、将src_data数据写入到dstpos位置;
75.将从拷贝原图的srcpos位置读取的num个像素值src_data数据写入到拷贝目的图dstpos位置,此时dstrect右边框外侧(tmp_dstpos为起点向后的一段像素区域)会存在不需要拷贝的无效原图数据。
76.步骤s3054、将tmp_dst_data写入到tmp_dstpos位置;
77.将步骤s3052从目的拷贝图的tmp_dstpos位置读取的num个像素值的tmp_dst_data数据写入到目的拷贝图的tmp_dstpos位置(覆盖步骤s3053中不需要拷贝的无效原图数据)。进入步骤s306。
78.步骤s306、若所有数据拷贝完成,结束操作,否则,返回步骤s302。
79.作为一个可选的实施方式,本发明在异常边缘情况下,根据拷贝目的图dstrect左上角x坐标dx0、dstrect框的宽rw、目的图写像素值起始点dstpos的y坐标dstpos.y的值重新计算tmp_dstpos位置,tmp_dstpos=(dx0 rw,dstpos.y)。并从目的图的tmp_dstpos位置读取num个像素值tmp_dst_data。采用数据先覆盖的方式解决边缘无效数据问题。将tmp_dst_data数据从tmp_dstpos位置开始覆盖dstrect边缘框右侧中写入的src_data中无效数据。通过tmp_dstpos位置计算、tmp_dst_data像素值的读取、src_data数据的写入、tmp_dst_data数据写入覆盖等相结合的方式解决边缘无效数据的问题。
80.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
81.在本实施例中还提供了一种图像像素的拷贝装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
82.图4是根据本发明实施例的图像像素的拷贝装置的结构框图,如图4所示,该装置包括第一确定模块42,用于确定拷贝原图的第一拷贝区域,以及拷贝目的图的第二拷贝区域;获取模块44,用于获取当前次拷贝操作中执行读取操作时所读取的所述第一拷贝区域
中的第一起始偏移点,以及在所述第二拷贝区域执行写入操作时的第二起始偏移点,其中,所述第二起始偏移点位于所述第二拷贝区域内;写入模块46,用于从所述第一起始偏移点开始,读取预设数量的第一像素值,并在所述拷贝目的图中以所述第二起始偏移点为起点写入所述第一像素值;覆盖模块48,用于在确定所述第一像素值中包括写入所述第二拷贝区域之外的第二像素值的情况下,将所述第二像素值所对应的像素点的原始像素值对应覆盖在所述第二像素值所对应的像素点上,其中,所述第二像素值所对应的像素点为在所述拷贝目的图中写入所述第二像素值的像素点。
83.可选地,上述覆盖模块48中的所述原始像素值通过如下方式确定:在所述拷贝目的图中,以所述第二起始偏移点为起点写入所述预设数量的所述第一像素值的情况下,预先确定所述预设数量的所述第一像素值对应的像素点中位于所述第二拷贝区域右边框上的边缘像素点的坐标;基于所述边缘像素点的坐标,在所述拷贝目的图中获取并存储以所述边缘像素点开始向右选取的所述预设数量的像素点的原始像素值,其中,所述预设数量的像素点的原始像素值中包括所述第二像素值对应像素点的原始像素值。
84.可选地,上述装置还包括:第二确定模块,用于确定所述第二拷贝区域的区域宽值;第三确定模块,用于将位于所述第二拷贝区域中的起始像素的坐标点的横坐标值,与所述区域宽值之和,确定为所述边缘像素点的横坐标;第四确定模块,用于将所述第二起始偏移点的纵坐标值,确定为所述边缘像素点的纵坐标。
85.可选地,上述写入模块46包括:第一确定子模块,用于在所述拷贝目的图中确定以所述边缘像素点开始向右选取的所述预设数量的像素点,其中,所述预设数量的像素点中包括所述第二像素值对应的像素点;覆盖子模块,用于将所述预设数量的像素点的原始像素值,对应覆盖在所述预设数量的像素点上。
86.可选地,上述获取模块44包括:获取子模块,用于获取工作项的起始偏移坐标值,其中,所述工作项用于将所述拷贝原图中的像素点拷贝到所述拷贝目的图;第二确定子模块,基于所述起始偏移坐标值与所述第一拷贝区域的起始像素点的坐标值之和,确定所述第一起始偏移点;第三确定子模块,用于基于所述起始偏移坐标值与所述第二拷贝区域的起始像素点的坐标值之和,确定所述第二起始偏移点。
87.可选地,上述第五确定模块,还包括:更新子单元,用于在所述第一拷贝区域宽值小于所述第二拷贝区域的原始宽值的情况下,将所述第二拷贝区域的原始宽值更新为所述第一拷贝区域宽值;比较子模块,用于在所述第二拷贝区域宽值小于所述第一拷贝区域宽值的情况下,保持所述第二拷贝区域宽值不变。
88.上述装置还包括:第六确定模块,用于在所述拷贝目的图中以所述第二起始偏移点为起点写入所述预设数量的所述第一像素值的情况下,确定所述第一像素值中包括的最后一个写入所述拷贝目的图中的像素值对应的第一目标像素点;第七确定模块,用于在所述第一目标像素点的横坐标大于第二目标像素点的横坐标的情况下,确定所述第一像素值中包括的写入所述第二拷贝区域之外的第二像素值,其中,所述第二目标像素点为位于所述第二拷贝区域的右边框上的像素点。
89.需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
90.本发明的实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被处理器执行时实现上述任一项中所述的方法的步骤。
91.可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:
92.s1,确定拷贝原图的第一拷贝区域,以及拷贝目的图的第二拷贝区域;
93.s2,获取当前次拷贝操作中执行读取操作时所读取的所述第一拷贝区域中的第一起始偏移点,以及在所述第二拷贝区域执行写入操作时的第二起始偏移点,其中,所述第二起始偏移点位于所述第二拷贝区域内;
94.s3,从所述第一起始偏移点开始,读取预设数量的第一像素值,并在所述拷贝目的图中以所述第二起始偏移点为起点写入所述第一像素值;
95.s4,在确定所述第一像素值中包括写入所述第二拷贝区域之外的第二像素值的情况下,将所述第二像素值所对应的像素点的原始像素值对应覆盖在所述第二像素值所对应的像素点上,其中,所述第二像素值所对应的像素点为在所述拷贝目的图中写入所述第二像素值的像素点。
96.在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:u盘、只读存储器(read-only memory,简称为rom)、随机存取存储器(random access memory,简称为ram)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
97.本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
98.在一个示例性实施例中,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
99.本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。
100.可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
101.s1,确定拷贝原图的第一拷贝区域,以及拷贝目的图的第二拷贝区域,其中,所述第二起始偏移点位于所述第二拷贝区域内;
102.s2,获取当前次拷贝操作中执行读取操作时所读取的所述第一拷贝区域中的第一起始偏移点,以及在所述第二拷贝区域执行写入操作时的第二起始偏移点;
103.s3,从所述第一起始偏移点开始,读取预设数量的第一像素值,并在所述拷贝目的图中以所述第二起始偏移点为起点写入所述第一像素值;
104.s4,在确定所述第一像素值中包括写入所述第二拷贝区域之外的第二像素值的情况下,将所述第二像素值所对应的像素点的原始像素值对应覆盖在所述第二像素值所对应的像素点上,其中,所述第二像素值所对应的像素点为在所述拷贝目的图中写入所述第二像素值的像素点。
105.显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装
置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
106.以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献