【发布时间】:2013-02-05 00:08:24
【问题描述】:
我在 PictureBox1 中有 image_1。我想扫描这张图片中间的一个矩形部分,比如 x 轴上的 300 到 500 和 y 轴上的 300 到 450。当我浏览这一部分时,我想将所有像素的值相加并得到它们的平均值。
然后我在测试图像 PictureBox2 中有 image_2。这是第一个图像的副本,但 PictureBox2 上有一个滚动条。如果我随后在与第一张图像相同的位置扫描第二张图像,则对该矩形内的每个像素值求和并获得它们的平均值,这些值应该与我使用 image_1 得到的值完全相同。
现在,我将使用 PictureBox2 上的滚动条在垂直 y 轴上稍微向上移动 image_2,然后在与之前相同的固定位置重新扫描,将像素值相加并获得它们的平均值。这些值应该不同,因为我正在扫描图像的不同部分。 然后,我在 image_2 上的 y 轴上以不同程度的差异重复此过程,以获取值读数。
这只是为了证明一个概念。在固定的矩形位置扫描图像,求和并取平均值就足以最终缩小值范围,以便可以定位对象的开头。
无论这是否被认为是可能的,我都想尝试一下。 请指教最简单的方法。现阶段没有必要尝试最快或最有效的方法,纯粹是目前最好的方法
我可以简单地这样做吗?
namespace imageAlign
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Bitmap myImage1 = (Bitmap)pictureBox1.Image;
OpenFileDialog ofd1 = new OpenFileDialog();
if (ofd1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
pictureBox1.Image = Image.FromFile(ofd1.FileName);
// get pixel value and store it in array, sum and average it so it can Be compared to image2
int sum = 0;
for (int i = 0; i > 300 && i < 500; i++)
{
for (int j = 0; j > 300 && j < 450; i++)
{
int[] img1 = new int[i];
sum += img1[i];
MessageBox.Show(sum);
//Color pixel = img1.GetPixel(i,j);
//sum and average pixel values in array
}
}
}
}
谢谢大家。
【问题讨论】:
-
这一切的目的是什么。你想达到什么目的?您想通过将第二张图片与第一张图片进行比较来了解第二张图片滚动了多少吗?它可以水平和垂直滚动吗?
-
您的 for 循环不正确。如果你想在 i 中从 300 到 500,应该是 for(int i = 300; i 你写的东西会直接跳出循环
-
@Jason Moore:不客气。另外,由于您是 StackOverflow 的新手,我想通知您,您可以通过勾选答案旁边的勾号来为好的答案投票并接受对您帮助最大的答案。在本网站上,点赞或接受的答案都算作“感谢”。