如何使用OpenCV改变图像轮廓外的背景颜色?
- 内容介绍
- 文章标签
- 相关推荐
本文共计945个文字,预计阅读时间需要4分钟。
本文分享了一个利用OpenCV进行轮涡外观色彩变换的整体代码示例。代码主要包含以下步骤:
1. 读取图像,并从图像中提取轮涡区域。
2.分析轮涡区域的颜色信息。
3.根据分析结果,对轮涡区域进行色彩变换。
4.保存或显示变换后的图像。
代码示例:
pythonimport cv2读取图像image=cv2.imread('image.jpg')
轮涡检测gray=cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)_, thresh=cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)contours, _=cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)contour=contours[0] # 选择第一个轮涡区域
轮涡区域提取mask=np.zeros_like(gray)cv2.drawContours(mask, [contour], -1, (255, 255, 255), -1)wheel_mask=cv2.bitwise_and(image, mask)
颜色分析hsv=cv2.cvtColor(wheel_mask, cv2.COLOR_BGR2HSV)v=hsv[:, :, 2]mean_v=np.mean(v)
轮涡区域色彩变换if mean_v > 128: new_v=255else: new_v=0wheel_mask[:, :, 2]=new_v
显示变换后的图像cv2.imshow('Result', wheel_mask)cv2.waitKey(0)cv2.destroyAllWindows()
该代码通过以下方式实现轮涡外观色彩变换:
1. 使用OpenCV读取图像,并将其转换为灰度图像。
2.应用阈值操作,提取轮涡区域。
3.将轮涡区域转换为HSV颜色空间,分析其亮度值。
4.根据亮度值,对轮涡区域进行色彩变换。
5.显示变换后的图像。
请注意,该代码仅为示例,实际应用中可能需要根据具体图像和需求进行调整。
本文实例为大家分享了Opencv轮廓外背景颜色改变的具体代码,供大家参考,具体内容如下
自行学习弄得简单代码,使用了图像中的轮廓发现以及提取,再绘制出来,改变轮廓外的像素
首先,头文件,写的比较多,没用的可以自己去除
#include <opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> #include"opencv2/imgproc/imgproc.hpp" #include <iostream> #include <fstream> #include <opencv2/opencv.hpp> //命名空间 using namespace cv; using namespace std;
//图片数据名字,原图,灰度图,二值图,直方图 Mat src,src_gray,dst,src_equ; //声明一个函数,建立滑动条 static void on_trackbar(int, void*);
主函数
int main(int argc, char** argv) { //图片读入 src = imread("D:\\PersonWork\\OpenCV\\program\\picture data\\0400.bmp"); //判断是否存在 if (!src.data) { cout << "Image no find,error!" << endl; } //灰度转换 cvtColor(src,src_gray, CV_BGR2GRAY); //原图窗口,显示 namedWindow("原图", 0); imshow("原图", src); //二值图窗口 namedWindow("二值图", 0); // 滑动条 int nThreshold = 120; createTrackbar("graybar", "二值图", &nThreshold, 255,on_trackbar); on_trackbar(nThreshold, 0); waitKey(0); destroyWindow("原图"); destroyWindow("二值图"); destroyWindow("result"); return 0; }
回调函数
static void on_trackbar(int pos, void*) { //二值化 threshold(src_gray, dst, pos, 255, CV_THRESH_BINARY); imshow("二值图", dst); //直方均匀化 equalizeHist(dst, src_equ); //识别轮廓 vector<vector<Point>> contours; vector<Vec4i> hierarchy; findContours(src_equ, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE); //轮廓数量,可没有 //int len=contours.size(); //cout<<len<<endl; //将图拷贝,进行遍历图片每个像素 Mat secImg = src_gray.clone(); const int np =secImg.rows * secImg.channels(); const int nr = secImg.rows; for(int j=0;j<nr;j++){ uchar *sdata = secImg.ptr<uchar>(j); for(int i=0;i<np;i++){ //判断是否在轮廓上或者外面,如果在便将像素变为255,即白色,因为这里需要的是最外轮廓,所以为contours[0],如果还需要别的,contours[i],i 可以取其他值 if (pointPolygonTest(contours[0],Point(i,j),false) != 1) sdata[i]=255; } } } //result窗口以及显示结果 namedWindow("result",0); imshow("result",secImg); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。
本文共计945个文字,预计阅读时间需要4分钟。
本文分享了一个利用OpenCV进行轮涡外观色彩变换的整体代码示例。代码主要包含以下步骤:
1. 读取图像,并从图像中提取轮涡区域。
2.分析轮涡区域的颜色信息。
3.根据分析结果,对轮涡区域进行色彩变换。
4.保存或显示变换后的图像。
代码示例:
pythonimport cv2读取图像image=cv2.imread('image.jpg')
轮涡检测gray=cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)_, thresh=cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)contours, _=cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)contour=contours[0] # 选择第一个轮涡区域
轮涡区域提取mask=np.zeros_like(gray)cv2.drawContours(mask, [contour], -1, (255, 255, 255), -1)wheel_mask=cv2.bitwise_and(image, mask)
颜色分析hsv=cv2.cvtColor(wheel_mask, cv2.COLOR_BGR2HSV)v=hsv[:, :, 2]mean_v=np.mean(v)
轮涡区域色彩变换if mean_v > 128: new_v=255else: new_v=0wheel_mask[:, :, 2]=new_v
显示变换后的图像cv2.imshow('Result', wheel_mask)cv2.waitKey(0)cv2.destroyAllWindows()
该代码通过以下方式实现轮涡外观色彩变换:
1. 使用OpenCV读取图像,并将其转换为灰度图像。
2.应用阈值操作,提取轮涡区域。
3.将轮涡区域转换为HSV颜色空间,分析其亮度值。
4.根据亮度值,对轮涡区域进行色彩变换。
5.显示变换后的图像。
请注意,该代码仅为示例,实际应用中可能需要根据具体图像和需求进行调整。
本文实例为大家分享了Opencv轮廓外背景颜色改变的具体代码,供大家参考,具体内容如下
自行学习弄得简单代码,使用了图像中的轮廓发现以及提取,再绘制出来,改变轮廓外的像素
首先,头文件,写的比较多,没用的可以自己去除
#include <opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> #include"opencv2/imgproc/imgproc.hpp" #include <iostream> #include <fstream> #include <opencv2/opencv.hpp> //命名空间 using namespace cv; using namespace std;
//图片数据名字,原图,灰度图,二值图,直方图 Mat src,src_gray,dst,src_equ; //声明一个函数,建立滑动条 static void on_trackbar(int, void*);
主函数
int main(int argc, char** argv) { //图片读入 src = imread("D:\\PersonWork\\OpenCV\\program\\picture data\\0400.bmp"); //判断是否存在 if (!src.data) { cout << "Image no find,error!" << endl; } //灰度转换 cvtColor(src,src_gray, CV_BGR2GRAY); //原图窗口,显示 namedWindow("原图", 0); imshow("原图", src); //二值图窗口 namedWindow("二值图", 0); // 滑动条 int nThreshold = 120; createTrackbar("graybar", "二值图", &nThreshold, 255,on_trackbar); on_trackbar(nThreshold, 0); waitKey(0); destroyWindow("原图"); destroyWindow("二值图"); destroyWindow("result"); return 0; }
回调函数
static void on_trackbar(int pos, void*) { //二值化 threshold(src_gray, dst, pos, 255, CV_THRESH_BINARY); imshow("二值图", dst); //直方均匀化 equalizeHist(dst, src_equ); //识别轮廓 vector<vector<Point>> contours; vector<Vec4i> hierarchy; findContours(src_equ, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE); //轮廓数量,可没有 //int len=contours.size(); //cout<<len<<endl; //将图拷贝,进行遍历图片每个像素 Mat secImg = src_gray.clone(); const int np =secImg.rows * secImg.channels(); const int nr = secImg.rows; for(int j=0;j<nr;j++){ uchar *sdata = secImg.ptr<uchar>(j); for(int i=0;i<np;i++){ //判断是否在轮廓上或者外面,如果在便将像素变为255,即白色,因为这里需要的是最外轮廓,所以为contours[0],如果还需要别的,contours[i],i 可以取其他值 if (pointPolygonTest(contours[0],Point(i,j),false) != 1) sdata[i]=255; } } } //result窗口以及显示结果 namedWindow("result",0); imshow("result",secImg); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

