img_np = cv2.cvtColor(img_np, cv2.COLOR_RGB2BGR) 取出一个像素点 分解成 BGR
时间: 2024-03-21 18:44:31 浏览: 24
可以使用以下代码取出OpenCV中BGR格式的numpy数组中的某个像素点,并分解成BGR颜色通道:
```
import cv2
import numpy as np
# 将QImage类型的img转换为OpenCV中的numpy数组
img_np = np.array(img.convertToFormat(QtGui.QImage.Format_RGB888))
img_np = img_np.reshape((img.height(), img.width(), 3))
img_np = cv2.cvtColor(img_np, cv2.COLOR_RGB2BGR)
# 取出(100, 100)处的像素点
b, g, r = img_np[100, 100]
print("B: ", b)
print("G: ", g)
print("R: ", r)
```
其中,可以使用numpy数组的索引操作取出某个像素点,例如img_np[100, 100]即取出了第100行,第100列处的像素点。然后,将该像素点分解成BGR颜色通道即可。
相关问题
from skimage.segmentation import slic, mark_boundaries import torchvision.transforms as transforms import numpy as np from PIL import Image import matplotlib.pyplot as plt import cv2 # 加载图像 image = Image.open('img.png') # 转换为 PyTorch 张量 transform = transforms.ToTensor() img_tensor = transform(image).unsqueeze(0) # 将 PyTorch 张量转换为 Numpy 数组 img_np = img_tensor.numpy().transpose(0, 2, 3, 1)[0] # 使用 SLIC 算法生成超像素标记图 segments = slic(img_np, n_segments=100, compactness=10) # 可视化超像素标记图 segment_img = mark_boundaries(img_np, segments) # 将 Numpy 数组转换为 PIL 图像 segment_img = Image.fromarray((segment_img * 255).astype(np.uint8)) # 保存超像素标记图 segment_img.save('segments.jpg') n_segments = np.max(segments) + 1 # 初始化超像素块的区域 segment_regions = np.zeros((n_segments, img_np.shape[0], img_np.shape[1])) # 遍历每个超像素块 for i in range(n_segments): # 获取当前超像素块的掩码 mask = (segments == i) # 将当前超像素块的掩码赋值给超像素块的区域 segment_regions[i][mask] = 1 # 保存超像素块的区域 np.save('segment_regions.npy', segment_regions) # 加载超像素块的区域 segment_regions = np.load('segment_regions.npy') # 取出第一个超像素块的区域 segment_region = segment_regions[37] segment_region = (segment_region * 255).astype(np.uint8) # 显示超像素块的区域 plt.imshow(segment_region, cmap='gray') plt.show(),将上述超像素块的区域添加黄色的边框
可以使用 OpenCV 库中的 rectangle 函数来为超像素块的区域添加边框,具体代码如下:
```python
import cv2
# 加载超像素块的区域
segment_regions = np.load('segment_regions.npy')
# 取出第一个超像素块的区域
segment_region = segment_regions[37]
segment_region = (segment_region * 255).astype(np.uint8)
# 将超像素块的区域转换为 BGR 格式
segment_region_bgr = cv2.cvtColor(segment_region, cv2.COLOR_GRAY2BGR)
# 添加黄色边框
segment_region_bgr = cv2.rectangle(segment_region_bgr, (0, 0), (segment_region_bgr.shape[1]-1, segment_region_bgr.shape[0]-1), (0, 255, 255), 2)
# 显示带有黄色边框的超像素块的区域
plt.imshow(segment_region_bgr)
plt.show()
```
其中,rectangle 函数的参数依次为:图像、左上角点坐标、右下角点坐标、颜色和线条宽度。黄色的 RGB 值为 (0, 255, 255)。
large_img1 = cv2.resize(img3, (0, 0), fx=2self.scale, fy=2self.scale) 改为以某个像素点为基准放大图片
如果要以某个像素点为基准放大图片,可以按照以下步骤进行:
1. 计算出以该像素点为中心,放大后的图片的大小。
2. 根据放大后的大小,创建一个空白的图片。
3. 将原图的像素点按照一定的比例复制到新的图片中,以达到放大的效果。具体来说,可以以该像素点为中心,在周围复制多个像素点,同时根据距离和颜色等因素,进行插值计算,以获得更加自然的放大效果。
4. 最后,可以根据需要,对放大后的图片进行一些后处理,如调整亮度、对比度等。
下面是一个可能的实现过程:
``` python
import cv2
import numpy as np
def zoom_at_point(img, scale, point):
# 以 point 为中心,计算放大后的大小
h, w = img.shape[:2]
x, y = point
new_h, new_w = int(h * scale), int(w * scale)
top, left = max(0, y - int(new_h / 2)), max(0, x - int(new_w / 2))
bottom, right = top + new_h, left + new_w
# 创建空白的图片
new_img = np.zeros((new_h, new_w, 3), dtype=np.uint8)
# 复制像素点,并进行插值计算
for i in range(top, bottom):
for j in range(left, right):
src_i, src_j = int((i - top) / scale), int((j - left) / scale)
if src_i < 0 or src_i >= h or src_j < 0 or src_j >= w:
continue
new_img[i - top, j - left] = img[src_i, src_j]
# 后处理
new_img = cv2.cvtColor(new_img, cv2.COLOR_BGR2RGB)
new_img = cv2.convertScaleAbs(new_img, alpha=1.2, beta=10)
return new_img
```
其中,`point` 表示要放大的像素点的坐标,`scale` 表示放大倍数,`img` 表示原始图片。函数返回放大后的图片。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)