Processing图片处理与像素操作

需积分: 44 19 下载量 171 浏览量 更新于2024-08-18 收藏 1.01MB PPT 举报
"Processing是一个开源编程语言和集成开发环境,常用于进行视觉艺术和数字设计。这个资源主要讲解了如何在Processing中进行图片处理,包括加载、显示图片以及对像素进行操作来实现特定效果。" 在Processing中,我们可以利用其提供的库和方法来方便地处理图片。下面是对标题和描述中提及的知识点的详细说明: 1. **加载库**: Processing中的`PImage`类是处理图像的关键。当你声明`PImage`类型的变量(如`photo`),它将被用来存储加载的图像数据。 2. **载入图片**: 使用`loadImage()`函数可以将本地或网络上的图片加载到`PImage`对象中。例如,`photo = loadImage("wzms.jpg");`将加载名为"wzms.jpg"的图片到`photo`变量。 3. **显示图像**: 要在画布上显示加载的图像,可以使用`image()`函数。`image(photo, 0, 0);`会将`photo`图像从坐标(0,0)开始绘制。你可以改变坐标参数来调整图像在画布上的位置。 4. **处理图片的每一个像素**: Processing允许我们访问并修改图像的每个像素。通过`loadPixels()`函数,我们可以读取和更改图像的像素数组。像素数据存储在`PImage`对象的`pixels`数组中,每个像素由红、绿、蓝三个通道的值组成。 5. **点画效果的实现**: 要实现点画效果,可以随机选取图像中的像素,然后在该像素的位置绘制一个圆点。这通常通过`random()`函数来实现,例如`int x = int(random(photo.width));`和`int y = int(random(photo.height));`分别获取图像宽度和高度内的随机坐标。 6. **载入网络图片**: 如果要从网络加载图片,可以在`setup()`函数中使用`loadImage()`,传入图片的URL和期望的文件格式。例如: ```processing PImage online; void setup() { String url = "http://processing.org/img/processing_beta_cover.gif"; online = loadImage(url, "png"); noLoop(); } void draw() { image(online, 0, 0); } ``` 这段代码会在程序启动时加载指定的网络图片,并在主画布上显示。 7. **像素处理**: 访问和修改单个像素的颜色可以通过以下方式: ```processing int xy = x + y * photo.width; // 计算像素在数组中的索引 loadPixels(); // 加载像素数据 float r = red(photo.pixels[xy]); // 获取红色分量 float g = green(photo.pixels[xy]); // 获取绿色分量 float b = blue(photo.pixels[xy]); // 获取蓝色分量 ``` 你可以根据需要更改这些值,然后使用`updatePixels()`更新图像的像素数组。 通过这些基本操作,Processing提供了丰富的可能性,无论是简单的图像显示还是复杂的图像处理算法,都能够轻松实现。学习和掌握这些知识,可以极大地扩展你在数字艺术、视觉设计以及数据可视化领域的创作能力。

import os import json import csv import cv2 from segment_anything import SamPredictor, sam_model_registry folder_path = 'D:\\segment-anything-main\\segment-anything-main\\input\\Normal\\' # 替换为实际的文件夹路径 output_file = 'D:\\细胞识别\\output.csv' # 替换为实际的输出文件路径 data_list = [] # 用于存储所有的坐标信息 for filename in os.listdir(folder_path): if filename.endswith('.json'): json_path = os.path.join(folder_path, filename) # 读取JSON文件 with open(json_path) as file: data = json.load(file) # 获取多边形坐标 shapes = data['shapes'] polygon_points = shapes[0]['points'] # 假设只有一个多边形标注 # 计算最小包围框的左上角和右下角坐标 x_coordinates = [point[0] for point in polygon_points] y_coordinates = [point[1] for point in polygon_points] min_x = min(x_coordinates) min_y = min(y_coordinates) max_x = max(x_coordinates) max_y = max(y_coordinates) # 将坐标信息添加到列表中 data_list.append({'Filename': filename, 'Min_X': min_x, 'Min_Y': min_y, 'Max_X': max_x, 'Max_Y': max_y}) # 写入CSV文件 with open(output_file, 'w', newline='') as file: fieldnames = ['Filename', 'Min_X', 'Min_Y', 'Max_X', 'Max_Y'] writer = csv.DictWriter(file, fieldnames=fieldnames) writer.writeheader() writer.writerows(data_list) # 生成input_prompts input_prompts = [] for data in data_list: input_prompt = f"处理文件:{data['Filename']},左上角坐标:({data['Min_X']}, {data['Min_Y']}),右下角坐标:({data['Max_X']}, {data['Max_Y']})" input_prompts.append(input_prompt) sam = sam_model_registry["default"](checkpoint="D:\\segment-anything-main\\segment-anything-main\\sam_vit_h_4b8939.pth") predictor = SamPredictor(sam) for filename in os.listdir(folder_path): if filename.lower().endswith(('.png', '.jpg', '.jpeg')): image_path = os.path.join(folder_path, filename) # Load and set the image for prediction your_image = cv2.imread(image_path) predictor.set_image(your_image) # Perform prediction using input prompts masks, _, _ = predictor.predict(input_prompts) # Perform further processing or analysis on the predicted masks for i, mask in enumerate(masks): mask_filename = f"mask_{i + 1}_{filename}" mask_path = os.path.join(folder_path, mask_filename) cv2.imwrite(mask_path, mask)

2023-07-17 上传