图片内容转化为坐标与像素


#include <stdio.h>
#include <stdint.h>

#define PIC_BUFF_TOTAL_PIX 200
	
static uint16_t s_PictureBuff[PIC_BUFF_TOTAL_PIX]={
	0x1100,0x1110,0x1120,0x1130,0x1140,0x1150,0x1160,0x1170,0x1180,0x1190,
	0x1200,0x1210,0x1220,0x1230,0x1240,0x1250,0x1260,0x1270,0x1280,0x1290,
	0x1300,0x1310,0x1320,0x1330,0x1340,0x1350,0x1360,0x1370,0x1380,0x1390,
	0x1400,0x1410,0x1420,0x1430,0x1440,0x1450,0x1460,0x1470,0x1480,0x1490,
	0x1500,0x1510,0x1520,0x1530,0x1540,0x1550,0x1560,0x1570,0x1580,0x1590,
	0x1600,0x1610,0x1620,0x1630,0x1640,0x1650,0x1660,0x1670,0x1680,0x1690,
	0x1700,0x1710,0x1720,0x1730,0x1740,0x1750,0x1760,0x1770,0x1780,0x1790,
	0x1800,0x1810,0x1820,0x1830,0x1840,0x1850,0x1860,0x1870,0x1880,0x1890,
	0x1900,0x1910,0x1920,0x1930,0x1940,0x1950,0x1960,0x1970,0x1980,0x1990,
	0x1A00,0x1A10,0x1A20,0x1A30,0x1A40,0x1A50,0x1A60,0x1A70,0x1A80,0x1A90,
	0x2100,0x2110,0x2120,0x2130,0x2140,0x2150,0x2160,0x2170,0x2180,0x2190,
	0x2200,0x2210,0x2220,0x2230,0x2240,0x2250,0x2260,0x2270,0x2280,0x2290,
	0x2300,0x2310,0x2320,0x2330,0x2340,0x2350,0x2360,0x2370,0x2380,0x2390,
	0x2400,0x2410,0x2420,0x2430,0x2440,0x2450,0x2460,0x2470,0x2480,0x2490,
	0x2500,0x2510,0x2520,0x2530,0x2540,0x2550,0x2560,0x2570,0x2580,0x2590,
	0x2600,0x2610,0x2620,0x2630,0x2640,0x2650,0x2660,0x2670,0x2680,0x2690,
	0x2700,0x2710,0x2720,0x2730,0x2740,0x2750,0x2760,0x2770,0x2780,0x2790,
	0x2800,0x2810,0x2820,0x2830,0x2840,0x2850,0x2860,0x2870,0x2880,0x2890,
	0x2900,0x2910,0x2920,0x2930,0x2940,0x2950,0x2960,0x2970,0x2980,0x2990,
	0x2A00,0x2A10,0x2A20,0x2A30,0x2A40,0x2A50,0x2A60,0x2A70,0x2A80,0x2A90,
};

typedef struct
{
	uint32_t X_Positon;
	uint32_t Y_Positon;
	uint16_t Pix_Value;
}PIX_ATITUDE_STRUCT;

#define PIX_PER_LINE 40 

static PIX_ATITUDE_STRUCT s_PixAtitude[PIC_BUFF_TOTAL_PIX]={0};

int main(void)
{
	static uint32_t s_line = 0;
		
	uint32_t i,k;

	printf("prepare to process!!!\n");

	for (i = 0; i < PIC_BUFF_TOTAL_PIX; i++){

		if((i % PIX_PER_LINE == 0)&&(i != 0)){
			s_line += 1;
		}

		s_PixAtitude[i].Pix_Value = s_PictureBuff[i];
		s_PixAtitude[i].X_Positon = i % PIX_PER_LINE;
		s_PixAtitude[i].Y_Positon = s_line;
	}

	printf("already to process!!!\n");

	for(k = 0; k< PIC_BUFF_TOTAL_PIX; k++){
		printf("s_PixAtitude[%d]:X_Positon = %d,Y_Positon = %d,Pix_Value = %04X\n",k,
			s_PixAtitude[k].X_Positon,s_PixAtitude[k].Y_Positon,s_PixAtitude[k].Pix_Value);
	}

}

点击打开链接

### 将图片转换为像素点坐标的处理方法或工具 在图像处理领域,将图片转换为像素点坐标是一项基础任务。以下是几种实现此目标的方法和工具: #### 方法一:使用 MATLAB 进行像素点坐标化 MATLAB 提供了强大的图像处理工具箱,可以方便地将图像中的像素点地理坐标进行相互转换。对于本地坐标(以左上角 `(1,1)` 为起点),可以通过以下方式提取像素点坐标: - 使用 `imread` 函数读取图像。 - 使用 `find` 函数定位非零像素点的位置。 - 如果需要进一步转换到地理坐标,则需要结合影像的地理参考信息(如 `.tfw` 文件或地理标签)完成映射[^1]。 #### 方法二:使用 Python 工具提取像素点坐标 Python 是一种灵活的语言,结合 OpenCV 或 PIL 库可以轻松提取像素点坐标。例如,可以使用以下代码获取指定颜色的像素点位置: ```python import cv2 import numpy as np # 读取图像 image = cv2.imread('image.png') # 转换为灰度图 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 找到非零像素点 coordinates = cv2.findNonZero(gray) # 输出像素点坐标 print(coordinates) ``` 此外,还可以使用专门的工具如 Image Tools 提取像素点坐标及其 RGB 值。该工具支持单点坐标提取、按键批量提取,并可自动复制到剪贴板[^2]。 #### 方法三:基于点运算的像素值映射 点运算是图像处理中的一种基本操作,通过对输入图像的像素值进行函数映射,生成输出图像。这种方法可以直接用于提取像素点坐标及对应的像素值。例如,假设输入图像为 `I(x,y)`,则可以通过简单的映射关系 `O(x,y) = f(I(x,y))` 来实现像素点的提取[^3]。 #### 方法四:投影坐标像素坐标的转换 如果需要将像素坐标转换为投影坐标(或反之),可以利用地理信息系统(GIS)中的坐标转换工具。例如,通过以下步骤实现像素坐标到投影坐标的转换: 1. 获取影像的内参矩阵 `K` 和相机坐标系下的点 `target_cam_coords`。 2. 使用齐次坐标计算投影点 `pixel_homogeneous = K @ target_cam_coords`。 3. 通过透视除法将齐次坐标转换为普通坐标: ```python u_raw = pixel_homogeneous[0] / pixel_homogeneous[2] v_raw = pixel_homogeneous[1] / pixel_homogeneous[2] ``` 4. 结合影像的地理参考信息完成最终转换[^5]。 #### 工具推荐 - **MATLAB**:适合需要精确地理坐标转换的场景。 - **Image Tools**:适用于快速提取像素点坐标及颜色值。 - **Python (OpenCV/PIL)**:灵活性高,适合批量处理和自定义开发。 ### 注意事项 - 如果图片过大或过小,可能需要缩放处理,但应注意缩放可能导致像素值失真[^2]。 - 在涉及地理坐标的转换时,确保影像具有正确的地理参考信息[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值