如何使用OpenCV技术进行图像精确分割操作?

2026-05-08 17:333阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计694个文字,预计阅读时间需要3分钟。

如何使用OpenCV技术进行图像精确分割操作?

使用OpenCV将图像分割成m×n块,以下是一段示例代码,包含代码部分和简要说明:

pythonimport cv2import numpy as np

def split_image_into_blocks(image, m, n): # 读取图像 img=cv2.imread(image)

# 获取图像尺寸 height, width=img.shape[:2]

# 计算每块的大小 block_height=height // m block_width=width // n

# 创建一个列表来存储块 blocks=[]

# 遍历图像并分割成块 for i in range(m): for j in range(n): # 计算块的坐标 y1=i * block_height y2=y1 + block_height x1=j * block_width x2=x1 + block_width

# 提取块 block=img[y1:y2, x1:x2] blocks.append(block)

return blocks

使用示例image_path='path_to_image.jpg'm=2n=3blocks=split_image_into_blocks(image_path, m, n)

打印每个块for i, block in enumerate(blocks): cv2.imshow(f'Block {i+1}', block) cv2.waitKey(0) cv2.destroyAllWindows()

代码说明:

1.导入必要的库:OpenCV(cv2)和NumPy(np)。

如何使用OpenCV技术进行图像精确分割操作?

2.定义一个函数`split_image_into_blocks`,它接受图像路径、块数m和n作为参数。

3.读取图像并获取其尺寸。

4.计算每块的高度和宽度。

5.创建一个空列表来存储分割后的块。

6.使用两层嵌套循环遍历图像,根据m和n分割成块。

7.提取每个块并添加到列表中。

8.返回包含所有块的列表。

9.示例使用中,指定图像路径、块数m和n,并调用函数。

10.使用OpenCV显示每个分割的块。

openCV实现将图像切成m*n块,供大家参考,具体内容如下

一、代码部分:

#include "stdafx.h" #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> #include <vector> #include<string> #include<sstream> using namespace std; using namespace cv; //Cut an image into m*n patch void Cut_img(Mat src_img, int m, int n, vector<Mat> ceil_img) { int t = m * n; int height = src_img.rows; int width = src_img.cols; int ceil_height = height / m; int ceil_width = width / n; Mat roi_img; //String concatenation ostringstream oss; string str, str1, str2; Point p1, p2; for (int i = 0; i<m; i++) { for (int j = 0; j<n; j++) { Rect rect(j*ceil_width, i*ceil_height, ceil_width, ceil_height); src_img(rect).copyTo(roi_img); ceil_img.push_back(roi_img); oss << i; str1 = oss.str(); oss.str(""); oss << j; str2 = oss.str(); oss.str(""); str = "roi_img_" + str1 + "_" + str2; imshow(str, roi_img); IplImage *ipl_roi_img=&IplImage(roi_img); //save processed img char tmp[100]="\0"; sprintf(tmp,"..\\post_img\\71253_%d_%d.jpg",i,j); cvSaveImage(tmp,ipl_roi_img); } } } int _tmain(int argc, _TCHAR* argv[]) { char *img_name_path="..\\image\\71253.jpg"; Mat img = imread(img_name_path,1); imshow("src_img", img); waitKey(0); int m = 2; int n = 2; vector<Mat> ceil_img ; Cut_img(img, m, n, ceil_img); cvWaitKey(0); return 0; }

二、程序运行结果:

(1)原图像:

(2)切割后图像:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

本文共计694个文字,预计阅读时间需要3分钟。

如何使用OpenCV技术进行图像精确分割操作?

使用OpenCV将图像分割成m×n块,以下是一段示例代码,包含代码部分和简要说明:

pythonimport cv2import numpy as np

def split_image_into_blocks(image, m, n): # 读取图像 img=cv2.imread(image)

# 获取图像尺寸 height, width=img.shape[:2]

# 计算每块的大小 block_height=height // m block_width=width // n

# 创建一个列表来存储块 blocks=[]

# 遍历图像并分割成块 for i in range(m): for j in range(n): # 计算块的坐标 y1=i * block_height y2=y1 + block_height x1=j * block_width x2=x1 + block_width

# 提取块 block=img[y1:y2, x1:x2] blocks.append(block)

return blocks

使用示例image_path='path_to_image.jpg'm=2n=3blocks=split_image_into_blocks(image_path, m, n)

打印每个块for i, block in enumerate(blocks): cv2.imshow(f'Block {i+1}', block) cv2.waitKey(0) cv2.destroyAllWindows()

代码说明:

1.导入必要的库:OpenCV(cv2)和NumPy(np)。

如何使用OpenCV技术进行图像精确分割操作?

2.定义一个函数`split_image_into_blocks`,它接受图像路径、块数m和n作为参数。

3.读取图像并获取其尺寸。

4.计算每块的高度和宽度。

5.创建一个空列表来存储分割后的块。

6.使用两层嵌套循环遍历图像,根据m和n分割成块。

7.提取每个块并添加到列表中。

8.返回包含所有块的列表。

9.示例使用中,指定图像路径、块数m和n,并调用函数。

10.使用OpenCV显示每个分割的块。

openCV实现将图像切成m*n块,供大家参考,具体内容如下

一、代码部分:

#include "stdafx.h" #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> #include <vector> #include<string> #include<sstream> using namespace std; using namespace cv; //Cut an image into m*n patch void Cut_img(Mat src_img, int m, int n, vector<Mat> ceil_img) { int t = m * n; int height = src_img.rows; int width = src_img.cols; int ceil_height = height / m; int ceil_width = width / n; Mat roi_img; //String concatenation ostringstream oss; string str, str1, str2; Point p1, p2; for (int i = 0; i<m; i++) { for (int j = 0; j<n; j++) { Rect rect(j*ceil_width, i*ceil_height, ceil_width, ceil_height); src_img(rect).copyTo(roi_img); ceil_img.push_back(roi_img); oss << i; str1 = oss.str(); oss.str(""); oss << j; str2 = oss.str(); oss.str(""); str = "roi_img_" + str1 + "_" + str2; imshow(str, roi_img); IplImage *ipl_roi_img=&IplImage(roi_img); //save processed img char tmp[100]="\0"; sprintf(tmp,"..\\post_img\\71253_%d_%d.jpg",i,j); cvSaveImage(tmp,ipl_roi_img); } } } int _tmain(int argc, _TCHAR* argv[]) { char *img_name_path="..\\image\\71253.jpg"; Mat img = imread(img_name_path,1); imshow("src_img", img); waitKey(0); int m = 2; int n = 2; vector<Mat> ceil_img ; Cut_img(img, m, n, ceil_img); cvWaitKey(0); return 0; }

二、程序运行结果:

(1)原图像:

(2)切割后图像:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。