for (int i = 1; i <= hist.Rows; i++) { Point p1 = new Point(2 * (i - 1), 400 - 1); Point p2 = new Point(2 * i - 1, 400 - hist.At<float>(i - 1) / 15); Scalar scalar = new Scalar(255, 255, 255); Cv2.Rectangle(histImage, p1, p2, scalar, -1); } Mat histImage3 = Mat.Zeros(400, 512, MatType.CV_8UC3); for (int i = 1; i <= hist.Rows; i++) { Point p1 = new Point(2 * (i - 1), 400 - 1); Point p2 = new Point(2 * i - 1, 400 - hist.At<float>(i - 1) / 15); Scalar scalar = new Scalar(255, 255, 255); Cv2.Rectangle(histImage3, p1, p2, scalar, -1); } double xxx = Cv2.CompareHist(hist, hist3, HistCompMethods.Correl); MessageBox.Show(xxx.ToString()); Bitmap bitmap1 = BitmapConverter.ToBitmap(result); pictureBox1.Image = bitmap1; }
时间: 2024-02-14 12:36:13 浏览: 163
这段代码是利用OpenCV库生成直方图图像,并进行直方图比较。首先使用for循环在histImage上绘制直方图,其中p1和p2分别为矩形的两个顶点,使用Cv2.Rectangle函数绘制矩形,scalar是矩形的颜色,-1表示矩形内部填充颜色。这里的直方图绘制使用了简单的竖条形式,每个条的宽度为2个像素,高度根据像素值大小比例计算。接下来使用相同的方式在histImage3上绘制直方图。然后使用Cv2.CompareHist函数计算两张灰度图像的直方图相似度,这里使用的是相关性比较方法。最后使用BitmapConverter.ToBitmap函数将结果转换为Bitmap格式并在PictureBox上显示。
相关问题
解释 Mat gray = img; Cv2.CvtColor(img, gray, ColorConversionCodes.BGR2GRAY); Mat equalImg = img; Cv2.EqualizeHist(gray, equalImg); hist = img; int[] channels = { 0 }; Rangef[] inRanges = new Rangef[] { new Rangef(0, 256) }; int[] histSize = { 256 }; Mat[] equals = new Mat[] { equalImg }; Cv2.CalcHist(equals, channels, new Mat(), hist, 1, histSize, inRanges); Mat histImage = Mat.Zeros(400, 512, MatType.CV_8UC3); for (int i = 1; i <= hist.Rows; i++) { Point p1 = new Point(2 * (i - 1), 400 - 1); Point p2 = new Point(2 * i - 1, 400 - hist.At<float>(i - 1) / 15); Scalar scalar = new Scalar(255, 255, 255); Cv2.Rectangle(histImage, p1, p2, scalar, -1); } result = histImage; Bitmap bitmap1 = BitmapConverter.ToBitmap(result); pictureBox1.Image = bitmap1;
这段代码的主要作用是对图像进行直方图均衡化,并将均衡化后的直方图显示在 WinForm 程序中的 PictureBox 控件中。
首先,代码中的变量 gray 和 equalImg 分别表示灰度图像和均衡化后的图像,其中都被赋值为原始图像 img。接下来,利用 Cv2.CvtColor 方法将原始图像转换为灰度图像,再利用 Cv2.EqualizeHist 方法对灰度图像进行直方图均衡化,得到均衡化后的图像。
然后,通过 Cv2.CalcHist 方法计算均衡化后的图像的直方图。其中 channels 数组表示图像通道的索引,这里只有一个通道,所以为 {0};histSize 数组表示每个通道的直方图中的 bin 的数量,这里为 256;inRanges 数组表示每个 bin 的范围,这里为 0 到 255;equals 数组表示要计算直方图的输入数组,这里只有一个均衡化后的图像。
接下来,通过 Cv2.Rectangle 方法将直方图绘制成一个矩形,其中矩形的高度表示该 bin 的数量,宽度为 2,每两个 bin 之间有一个像素的间隔。最后,通过 BitmapConverter.ToBitmap 方法将处理后的图像转换为 Bitmap 格式,并将其显示在程序中的 PictureBox 控件中。
// 建立用户数组 除了目标用户外 随机再抽取9个用户 String[] users = new String[10]; users[0] = this.userid; List<Users> usersList = this.usersDAO.getUsers(this.userid); System.out.println("users == > " + usersList.size()); } List<Goods> goodsList = this.goodsDAO.getAllGoods(); this.goods = new String[goodsList.size()]; for (int j = 0; j < goodsList.size(); j++) { this.goods[j] = goodsList.get(j).getGoodsid(); } // 建立二维数组 用户如果浏览了商品则标记为1未浏览则标记为0,之后计算用户之间的相似度 int[][] allUserGoodshist = new int[10][goodsList.size()]; for (int i = 0; i < 10; i++) { for (int j = 0; j < goodsList.size(); j++) { String goodsid = this.goods[j]; Hist hist = new Hist(); hist.setUsersid(users[i]); hist.setGoodsid(goodsid); List<Hist> histList = this.histDAO.getHistByCond(hist); } } for (int i = 0; i < 10; i++) { for (int j = 0; j < goodsList.size(); j++) { if (j == goodsList.size() - 1) { System.out.print(allUserGoodshist[i][j]); } else { System.out.print(allUserGoodshist[i][j] + " ,"); } } System.out.println(""); } this.targetUserCommentedGoods = new ArrayList<String>(); Hist hist = new Hist(); hist.setUsersid(this.userid); List<Hist> histList = this.histDAO.getHistByCond(hist); for (int i = 0; i < histList.size(); i++) { // 计算用户相似度,对相似度进行排序 this.calcUserSimilarity(allUserGoodshist, goodsList.size()); // 计算商品推荐度,进行排序 this.calcRecommendGoods(allUserGoodshist, goodsList.size()); // 处理并生成推荐商品列表 this.handleRecommendGoods(allUserGoodshist, goodsList.size()); String rommendId = ""; for (int i = 0; i < this.targetRecommendGoods.size(); i++) { String item = this.targetRecommendGoods.get(i); if (!commentedGoods.contains(item)) { if (i == this.targetRecommendGoods.size() - 1) { rommendId += item; } else { rommendId += item + ","; } } }
这段代码是一个基于用户的协同过滤算法,用于推荐商品给用户。首先,从数据库中获取用户浏览商品的历史记录,然后建立一个二维数组,用于记录用户是否浏览过每个商品。接下来,计算用户之间的相似度,对相似度进行排序,计算商品推荐度,进行排序,最后生成推荐商品列表。其中,处理推荐商品列表时,将已经评论过的商品从推荐列表中移除。
阅读全文